配置文件的多属性匹配

Tho*_*key 3 algorithm matching n-dimensional

我正在尝试解决约会网站的问题.这是问题所在

app的每个用户都有一些属性 - 比如他读的书,他看的电影,音乐,电视节目等.这些是定义的顶级属性类别.这些类别中的每一个都可以具有任意数量的值.例如在书中:喷泉头,爱情故事......

现在,我需要根据配置文件属性匹配用户.这是我打算做的事情:

使用反向索引存储数据.如果每个Fountain Head,Love Story等都是具有该属性的用户集的索引键.

当新用户加入时,获取该用户的属性,找到该用户的哪些索引键,获取这些键的所有用户,存储桶(或基数排序或类似排序),以根据用户输入的次数进行排序这个合并的清单.

这好,坏,更糟吗?还有其他建议吗?

谢谢Ajay

Sha*_*baz 8

你描述的算法并不坏,虽然它使用了一个非常简单的人与人之间的相似概念.

让我们使其更加可调,而无需创建复杂的匹配条件.让我们说喜欢同一本书的人比听同一种音乐的人更相似.每一种兴趣都是如此.也就是说,不同领域的相似性具有不同的权重.

就像你说的那样,你可以为那些在他们的个人资料中拥有该兴趣的人保留每个兴趣(如书,歌等)的列表.然后,说你想找到男人的比赛g:

for each interest i in g's interests:
  for each person p in list of i
    if p and g have mismatching sexual preferences
      continue
    if p is already in g's match list
      g->match_list[p].score += i->match_weight
    else
      add p to g->match_list with score i->match_weight

sort g->match_list based on score
Run Code Online (Sandbox Code Playgroud)

然而,权重的选择并不是一项简单的任务.你需要很多心理才能做到这一点.然而,使用你的常识,你可以获得不那么遥远的价值.

一般来说,匹配人员比总结一些分数要复杂得多.例如,某组匹配兴趣可能比其单独的总和具有更多(或在某些情况下更少)的效果.此外,无论其他匹配兴趣存在多少,对一个人的兴趣可能完全导致另一个人的拒绝(例如,两个非常相似的人,其中一个人喜欢,另一个人讨厌暮光之城)