2009-07-17 85 views
5

我需要根据用户评分对一些产品进行排序。A排名算法

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

以下每行都是用户反馈比较3种款产品:

150点 - b 0,点(该用户只告诉我们他的想法的2产品A和b中的比较和b他的是,如果他给出了一个150点,然后b值0点)

a 150分 - -C 20点

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

一个200点 - b 40点 - C 100点

一个150点 - b 50点

150点 - B 20分

(这些评级只是一个样本,并在产品和收视率的现实世界排名比这个大得多)

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

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

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

你不能只加点和计算产品的点平均 原因是很重要的它是如何得到他的观点假设一个得到了800分对b - 然后ç得到10分对一个这样的:

200 - b 0

200 - B 0

200 - B 0

200 - B 0

-C 10 - 0(这意味着c小于更好)

所以绝对是a要好于b但小10分c得到了更好的排名a

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

回答

5

你有一些挑战。添加排名c 0 - b 20并且您有一个圈,其中c < b < a < c

当然,您的订单不仅没有transitif(从< b < C不遵循<ç)你不能决定这是因为没有用户更好的,这也不是总(有可能是元素投票已经完成,甚至可以通过其他元素。

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

你可以找到一个特定的节点开始更好的节点在图中前进,可能会找到多个不可比较的解决方案再次启动节点,停止处理该路径。

也许在数学中的顺序理论可以帮助您:查找order theory,部分顺序,Hasse diagram

为了使这更实用:

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

3

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

+1

的baysean评级系统在元素评级时起作用,但当评级与其他元素相关时则不起作用。 – 2009-07-17 12:28:48

1

我认为你需要涉及每个人在每个产品上如何投票 - 例如: 人1投票:100一,50 b和0对C 人2 b和80投0了,200对于C

这应该被解释成:
人1投3为一个,2 b和-1对C
人2投-1对应,3 b和2对C

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

我最初的想法上也无妨