简单排名算法

11

我需要创建一个投票,这个投票是为了创建一个物品排名列表,按照好坏程度排序。我打算向每个用户展示两个物品,并让他们选择其中一个认为更好的,然后重复多次这个过程。这有点类似于电影《社交网络》中看到的内容。根据接收到的答案,我应该如何排列这些物品?


1
类似的吗?https://dev59.com/j2865IYBdhLWcg3wM7q0 - Lior Kogan
1
类似的吗?https://dev59.com/_FzUa4cB1Zd3GeqPzQ_G - Lior Kogan
物品是否为类似类型。例如,您是在比较汽车类型(Ferrari vs. Aston Martin)还是想要对不同的对象进行排名(汽车 vs. GI Joe 玩具)。如果您正在比较同一“类别”中的项目(交通工具),则可以仅记录每个项目的#投票,并按此排序作为超简单的排名方式。如果您打算比较不同的项目,则会变得更加复杂。 - FloppyDisk
@FloppyDisk 这些项目都是相同类型的(图像),但问题在于它们可能不会以相同的次数显示,而且评分非常主观(哪个扭曲的图像更接近原始图像)。 - ThePiachu
@ThePiachu,我写了一条评论,但是它变得太长了,所以我把它变成了一个答案。 - FloppyDisk
3个回答

11

1
不确定为什么这篇文章会被踩。它并不是那么复杂 - 可以用C#完成,只需要50行代码 - 而且似乎适用于OP的问题。 - ladenedge

4
我认为您可以使用Elo算法,这个算法是由Arpad Elo教授创造的,用于排名国际象棋选手。您可以在此维基百科页面上了解更多关于该算法的信息。
Mark Zuckerburg也曾在制作Facemash时使用过它。这是一个网站,人们可以根据女孩的吸引力进行评分。如果您看过电影《社交网络》,您就会知道这一点。如果您想实际使用此算法,您可以访问此页面。如果您了解PHP,您可以轻松更改index.php(主页)的外观。您可以用任何您想要排名的图像替换女孩的图像。

1

根据您的评论,我的假设如下:

  1. 您有一组原始图像。
  2. 您有x个给定原始图像的副本,其中x>= 1。
  3. 对于给定的图片,用户只会看到该图片的副本,而不是来自另一个原始图片的图片。

为了澄清,您是否打算设置让用户看到两个随机扭曲的图像,还是将扭曲的图像与特定的原始图像相关联?

如果您打算将特定的扭曲图像与特定的原始图像相关联,我认为我的想法可以奏效。

对于与原始项目相关的扭曲图像上的每个投票,将1添加到该原始项目的总投票数中。
在所选的扭曲图像上将“是”投票数加1。
在未选择的扭曲图像上将“不是”投票数加1。
在每个扭曲图像上将总投票数加1。
使用image_rank =(#total_distorted_image_votes /#original_image_total_votes)* 100来规范化“图像排名”。
使用yes_rank =(#total_distorted_image_yes_votes /#total_distorted_image_votes)* 100来规范化“是”排名。
按image_rank或yes_rank排序。使用yes_rank将奖励具有大量“是”投票的图像,而使用image_rank将奖励出现频率高的图像。
如果您拥有总体投票计数器,则可以扩展此功能以开始对原始图像“组”进行排名。您只需将其规范化(image_votes / total_votes)* 100并进行排序。然后,您将获得哪些图像出现最多的“排名”。

我打算向用户展示原始图像和两个扭曲的图像。 用户需要选择哪个扭曲的图像更接近原始图像,这使问题有点难度。 - ThePiachu
如果您只有一张原始图像,那么我的想法可以完美地工作。如果您有多个原始图像,则该想法仍然适用。您只需在原始图像和显示的扭曲图像之间创建一个引用,跟踪每个扭曲图像显示时的“是”票数和总票数。您可以将其看作一个图形,并以这种方式实现该想法。 - FloppyDisk

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