我的平台是 Ruby——一个特别使用 Rails 3.2 的 webapp。
我正在尝试根据对象(人)对某些项目的评分来匹配对象(人)。人们可能会像其他人一样评价所有、部分或不评价相同的项目。评分是 0 到 5 之间的整数。可评分的项目数量和用户数量都可以被认为是重要的。
一个简单的例子 -
蛮力方法是遍历所有人,计算每个项目的差异。在 Ruby 风格的伪代码中 -
MATCHES = {}
for each (PERSON in (people except USER)) do
for each (RATING that PERSON has made) do
if (USER has rated the item that RATING refers to) do
MATCHES[PERSON's id] += difference between PERSON's rating and USER's rating
end
end
end
lowest values in MATCHES are the best matches for USER
这里的问题是,随着项目、评分和人数的增加,这段代码将需要很长时间才能运行,并且暂时忽略缓存,这是必须运行很多的代码,因为这种匹配是主要的我的应用程序的功能。
我对更聪明的算法和更聪明的数据库持开放态度来实现这一点,但是通过算法来实现它并因此允许我将所有内容保存在 MySQL 或 PostgreSQL 中会让我的生活更轻松。我唯一要说的是数据确实需要持久化。
如果任何更多细节会有所帮助,请随时询问。非常感谢任何帮助!