3

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

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

现在,我需要根据个人资料属性匹配用户。这是我打算做的事情:

使用反向索引存储数据。如果喷泉头、爱情故事等中的每一个都是具有该属性的用户集的索引键。

当有新用户加入时,获取该用户的属性,查找该用户的哪些索引键,获取这些键的所有用户,桶(或基数排序或类似排序)根据用户进入的次数进行排序这个合并列表。

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

谢谢阿杰

4

1 回答 1

8

您描述的算法还不错,尽管它使用了一个非常简单的人与人之间的相似性概念。

让我们使它更可调整,而无需创建复杂的匹配标准。假设喜欢同一本书的人比听相同音乐的人更相似。每一种兴趣都是如此。即不同领域的相似度具有不同的权重。

就像你说的,你可以为个人资料中拥有这些兴趣的人保留一份列表(如一本书、一首歌等)。然后,假设您要查找 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

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

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

于 2012-05-07T10:39:58.833 回答