Tho*_*key 3 algorithm matching n-dimensional
我正在尝试解决约会网站的问题.这是问题所在
app的每个用户都有一些属性 - 比如他读的书,他看的电影,音乐,电视节目等.这些是定义的顶级属性类别.这些类别中的每一个都可以具有任意数量的值.例如在书中:喷泉头,爱情故事......
现在,我需要根据配置文件属性匹配用户.这是我打算做的事情:
使用反向索引存储数据.如果每个Fountain Head,Love Story等都是具有该属性的用户集的索引键.
当新用户加入时,获取该用户的属性,找到该用户的哪些索引键,获取这些键的所有用户,存储桶(或基数排序或类似排序),以根据用户输入的次数进行排序这个合并的清单.
这好,坏,更糟吗?还有其他建议吗?
谢谢Ajay
你描述的算法并不坏,虽然它使用了一个非常简单的人与人之间的相似概念.
让我们使其更加可调,而无需创建复杂的匹配条件.让我们说喜欢同一本书的人比听同一种音乐的人更相似.每一种兴趣都是如此.也就是说,不同领域的相似性具有不同的权重.
就像你说的那样,你可以为那些在他们的个人资料中拥有该兴趣的人保留每个兴趣(如书,歌等)的列表.然后,说你想找到男人的比赛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)
然而,权重的选择并不是一项简单的任务.你需要很多心理才能做到这一点.然而,使用你的常识,你可以获得不那么遥远的价值.
一般来说,匹配人员比总结一些分数要复杂得多.例如,某组匹配兴趣可能比其单独的总和具有更多(或在某些情况下更少)的效果.此外,无论其他匹配兴趣存在多少,对一个人的兴趣可能完全导致另一个人的拒绝(例如,两个非常相似的人,其中一个人喜欢,另一个人讨厌暮光之城)