一个排名算法

5
我需要根据用户评分对一些产品进行排序。
假设我们有3个产品{a,b,c},我们有用户对这些产品的反馈。不重要的是哪个用户给我们反馈(如果您熟悉相关过滤,则此问题与用户兴趣无关)。
以下每行都是用户在尝试比较这3个产品时的反馈:
a 150分 - b 0分(该用户只告诉我们他对a和b两个产品的看法,在比较a和b时,他认为如果他给出150分,则b值0分)
a 150分 - c 20分
c 200分 - a 10分(尽管前一个用户认为c比a更好)
a 200分 - b 40分 - c 100分
a 150分 - b 50分
a 150分 - b 20分
(这些评级仅供参考,在现实世界中,产品数量和评级比这还要大得多)
现在我需要一种算法来根据用户投票找到产品的排名。在我看来,最好的方法是用相关图来描述这个问题,并将所有产品连接起来。
任何形式的帮助或提示都会受到赞赏。
/********************************************************************************/
您不能只添加分数并计算产品分数的平均值,因为它如何获得分数很重要。假设a对b得到了800分-然后c对a得到了10分,如下所示:
a 200 - b 0
a 200 - b 0
a 200 - b 0
a 200 - b 0
c 10 - a 0(这意味着c比a更好)
因此,明确地说a比b更好,但是c以小小的10分从a获得了更好的排名。
/********************************************************************************/
3个回答

5
您面临一些挑战。添加一个排名 c 0 - b 20,您就得到了一个圆圈,在这个圆圈中 c < b < a < c
当然,您的排序不仅不是传递性的(从 a < b < c 并不能得出 a < c),而且也不是完全的(可能有一些元素您无法决定哪个更好,因为没有用户投票,即使通过其他元素也不行)。
您得到的是一个离散、有向、有限图形(使用边的方向表示哪个元素(节点)更好)。从某个节点开始,您可以通过图形找到更好的节点,可能会找到多个不可比较的解决方案。如果再次访问起始节点,请停止处理该路径。
也许数学中的序理论能帮助您:寻找序理论、偏序、哈斯图
为了使这更实用:
使用一个二维数组,每个元素都有一行和一列。在单元格(a,b)中计算评分的总和。从某个元素 a 开始,跟随所有正向(>0)连接,直到您要么到达没有正向连接的节点,要么回到您已经访问过的节点。这些节点就是您的解决方案。

3
一个贝叶斯评分系统可能是您的最佳选择 - 它考虑了投票和项目相对投票数量,以便给出加权分数。

1
贝叶斯评分系统适用于对元素进行评分,但不适用于将它们与其他元素进行比较评分。 - malach

1
我认为你需要描述每个人对每个产品的投票情况 - 比如: 第一个人投票:a得到100票,b得到50票,c得到0票 第二个人投票:a得到0票,b得到200票,c得到80票
这应该被翻译为: 第一个人对a投了3票,对b投了2票,对c投了-1票 第二个人对a投了-1票,对b投了3票,对c投了2票
其中我使用了: 3表示最高票数 2表示第二高票数 1表示最低票数 如果他们投了0票(表示不喜欢/不考虑该产品),则使用-1。
这是我最初的想法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接