排名算法

时间:2009-07-17 10:44:28

标签: algorithm math graph ranking voting

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

假设我们有3种产品{ a b c },我们就此产品提供了用户反馈。 哪个用户给我们反馈并不重要(如果你熟悉它,这个问题不是关于相关过滤的问题 - 用户兴趣不是这里的情况)

以下每一行都是用户在尝试比较3种产品时的反馈:

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分

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

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

感谢任何形式的帮助或提示。

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

您不能只添加积分并计算产品积分的平均值 因为重要的是如何得出他的观点,假设 a b 得到800分 - 然后 c a得到10分喜欢这样:

200 - b 0

200 - b 0

200 - b 0

200 - b 0

c 10 - a 0(这意味着c优于a)

所以肯定 a 优于 b 但是小点10分 c a 得到更好的排名>

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

3 个答案:

答案 0 :(得分:5)

你有一些挑战。添加排名 c 0 - b 20 ,你得到一个圆圈,其中 c< b< a< ç

当然,您的订单不仅不是特定的(来自< b< c&c;不遵循< c ),它也不是全部(可能有些元素你不能决定哪个更好,因为没有用户投票,甚至通过其他元素。

你得到的是disconnected, directed, finite graph。 (使用边缘的方向来说明哪个元素(节点更好)。

从某个节点开始,您可以找到更好的节点在图表中行进,也许找到多个不可比较的解决方案。如果再次访问起始节点,请停止处理该路径。

也许数学中的顺序理论可以帮助你:寻找order theory,偏序,Hasse diagram

使这更加实用:

使用二维数组,每个元素包含一行和一列。在单元格(a,b)中计算评级的总和。从某个元素a开始,遵循所有positiv(> 0)连接,直到您到达没有positiv连接的节点或返回到您已访问过的节点。这些节点是您的解决方案。

答案 1 :(得分:3)

baysean rating system可能是您最好的选择 - 它会考虑一个项目的投票和相对投票数,以便给予加权分数。

答案 2 :(得分:1)

我认为您需要了解每个人对每种产品的投票方式 - 例如: 第1人投票:100表示​​a,50表示b,0表示c 第2人投票0投0票,投票票数200票,c投票票80票

这应该被翻译成:
person 1投票3投a,2投b,-1投c 人2投票-1为a,3为b,2为c

我正在使用的地方:
3为最高投票
2为第二高的 1表示最低的
和-1如果他们投票0(表示他们不喜欢/没有考虑产品)

我最初的想法无论如何