首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种排序算法

一种排序算法
EN

Stack Overflow用户
提问于 2009-07-17 10:44:27
回答 3查看 3.3K关注 0票数 5

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

假设我们有3个产品{abc},并且我们有用户对该产品的反馈。哪个用户给我们反馈并不重要(如果您熟悉相关过滤,这个问题与相关过滤无关--这里的情况不是用户兴趣)。

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

A 150分-b 0分(这个用户刚刚告诉我们他对2种产品a和b的看法,并将a和b进行比较,他认为如果他给出150分,那么b就等于0)

A 150分-c 20点

C 200分-10分(尽管上一位用户认为c更好于a)

A 200分-b 40分-c 100点

A 150分-b 50点

A 150分-b 20点

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

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

任何类型的帮助或提示都是值得赞赏的。

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

你不能只是加分并计算产品积分的平均值,因为它如何得到他的分数是很重要的。假设ab获得800分,那么ca上得到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得到了a的更好的排名。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-17 12:16:29

你有一些挑战。加上一个排序c 0-b 20,您就得到了一个圆圈,其中c 。

当然,您的顺序不仅仅是不传递(a不跟随< c ),它也不是完全的(可能有一些元素您无法决定哪个更好,因为没有用户投票,即使是通过其他元素。

你得到的是一个断开、有向、有限图。(使用边的方向来说明哪个元素(节点更好)。

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

也许数学中的有序理论可以帮助你:寻找序论,偏序,Hasse图

为了使这更切合实际:

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

票数 5
EN

Stack Overflow用户

发布于 2009-07-17 11:01:42

一个baysean评级系统可能是你最好的选择--它考虑了一个项目的得票数和相对票数,以便给它一个加权分数。

票数 3
EN

Stack Overflow用户

发布于 2009-07-17 12:28:55

我认为你需要把每个人对每种产品的投票方式联系起来--例如:1人投票:a 100票,b 50票,c 0 2票a,b 200票,c 80票。

这应转化为:

1人投票3票赞成a票,2票赞成b票,1票赞成c票。

第2人投票-1票赞成,3票赞成,2票赞成。

我用的地方:

3票赞成

2位为第二高

最低一名

-1如果他们投0(表示他们不喜欢/不考虑该产品)

不管怎样,我最初的想法是

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1142556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档