Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.5k views
in Technique[技术] by (71.8m points)

算法:按照标签相似度获取指定数量的其他值?

加入有一个游戏包含很多标签,这个时候有一个游戏推荐的栏目,其规则如下:

  1. 首先寻找标签完全一致的游戏,有4个就提取4个
  2. 不够4个就寻找标签有一个不同的游戏,
  3. 依次类推直到全不相同的游戏

好像有什么二进制运算啥的,但是搞不清楚。跪求大佬指引?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

假设你的一个游戏和标签是按照id绑定的,那么直接按照匹配个数排序就好了吧。二进制解决方案没想到

func findGame(labels [][]int, label []int){
   findSame := func(sli1, sli2 []int) (num int){
      for i := range sli1{
         for j := range sli2{
            if sli1[i] == sli2[j]{
               num ++
               break
            }
         }
      }
      return
   }
   sort.Slice(labels, func(i, j int) bool {
      return findSame(label, labels[i]) > findSame(label, labels[j])
   })
}

如果绑定的id还是有序的那么还能在寻找匹配个数时再优化


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...