2009-07-17 82 views
0

我需要根据用户评分对一些产品进行排序。产品排行榜

假设我们有3个产品{a,b,c},并且我们有用户对此产品的反馈。用户给我们反馈并不重要(这个问题不是关于相关的过滤,如果你熟悉的话 - 用户的兴趣不在这里)

下面的每一行都是用户反馈,当他们试图比较3款产品:

a 150分-b 0分(这位使用者告诉我们他认为2款产品a和b以及a和b的比较,尽管如果他给出了150分,那么b的价值0点)

一个150点 - C 20个的点

C 200分 - 10分(尽管先前的一个这种用户认为c是更好在于:a)

一个200点 - B 40分 - C 100点

一个150点 - B 50分

一个150点 - B 20分

(这些评分只是一个样本,在现实世界中产品数量和评分远远大于此)

现在我需要一种算法来根据用户投票找到产品的排名。在我看来,最好的方法是用相关图来描述这个问题,并将所有产品连接起来。

赞赏任何形式的帮助或提示。

/********************************************* *********************************/**

你不能只加点和计算均值产品的点原因是很重要的它是如何得到他的分假设对b A得到了800分 - 那么C得到10分针对这样的:

200 - b 0

200 - b 0

a 200 -b 0

200 - B 0

-C 10 - 0(这意味着c是优于一个)

所以肯定A比B但具有小的10点C从一个有一个更好的秩更好

/********************************************* *******************************/

+0

绝对重复? – EFraim 2009-07-17 12:11:31

+0

http://stackoverflow.com/questions/1057269/implementing-a-ranking-system – EFraim 2009-07-17 12:12:07

回答

1

这是多么奇怪的排名方式。我建议,对于每个用户,您需要为他们排名第一的所有产品创建排名。举例来说,如果用户没有这样的:

a 200 - b 0 
c 10 - a 0 

那么你可能想将其转换成一个完整的为用户设置是这样的:

c 210 - a 200 - b 0 

然后,你需要正常化(假设所有用户都相同的权重):

c 100 - a (200/210) - b 0 

那么,如果用户有不同的权重(换句话说,一个用户拥有比另一种更可信),那么你可以这样做(假设该用户的信誉5):

c 100*5 - a (200/210)*5 - b 0 

一旦你做完了,你可以总结所有用户的每个产品的所有结果。

1

听起来很复杂。我接近它的方式是定期重新排名排名并将排序顺序存储到数据库。从你所描述的,它听起来像一个巨大的代数系统。我不知道这是否可以在数据库中解决,但即使可以解决,也可能需要很长的时间来解决,所以我觉得缓存将成为你的朋友。

至于排序顺序的实际调查结果,我会建立方程列表,如:

A = B + 400 C = A + 10

而一旦你拥有了整个列表构建,解决整个事情并缓存排名