您描述的算法还不错,尽管它使用了一个非常简单的人与人之间的相似性概念。
让我们使它更可调整,而无需创建复杂的匹配标准。假设喜欢同一本书的人比听相同音乐的人更相似。每一种兴趣都是如此。即不同领域的相似度具有不同的权重。
就像你说的,你可以为个人资料中拥有这些兴趣的人保留一份列表(如一本书、一首歌等)。然后,假设您要查找 guy 的匹配项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
然而,权重的选择并不是一项简单的任务。你需要很多心理学才能做到这一点。但是,使用您的常识,您可以获得不那么遥远的值。
一般来说,匹配人比对一些分数求和要复杂得多。例如,一组匹配的兴趣可能比它们单独的总和具有更多(或在某些情况下更少)的影响。此外,无论存在什么其他匹配的兴趣,对一个人的兴趣都可能完全导致另一个人的拒绝(以两个非常相似的人为例,他们中的一个喜欢而另一个讨厌暮光之城)