List 通过一次显示两个项目,根据用户的偏好对列表中的项目进行排序的最有效方法是什么?

List 通过一次显示两个项目,根据用户的偏好对列表中的项目进行排序的最有效方法是什么?,list,algorithm,sorting,comparison,ranking,List,Algorithm,Sorting,Comparison,Ranking,在某些情况下,我建议观看汤姆·斯科特(Tom Scott)的这段视频,他在视频中确定了什么是最好的“东西”:。我想这将有助于解释我的问题 基本上,我试图制作一个算法/程序,让one用户通过一次在两个项目中选择他最喜欢的项目来对列表中的所有项目进行排序 例如,最基本的列表包含3项:A、B和C。 操作顺序如下所示: 用户可以选择:A或C 他更喜欢C 用户可以选择:B或C 他更喜欢C 用户可以选择:A或B 他更喜欢A 因此,我们知道,在3次比较中,排名顺序为[C>A>B] 但是如果在第4步,用户会选

在某些情况下,我建议观看汤姆·斯科特(Tom Scott)的这段视频,他在视频中确定了什么是最好的“东西”:。我想这将有助于解释我的问题


基本上,我试图制作一个算法/程序,让one用户通过一次在两个项目中选择他最喜欢的项目来对列表中的所有项目进行排序

例如,最基本的列表包含3项:A、B和C。 操作顺序如下所示:

  • 用户可以选择:A或C
  • 他更喜欢C
  • 用户可以选择:B或C
  • 他更喜欢C
  • 用户可以选择:A或B
  • 他更喜欢A
  • 因此,我们知道,在3次比较中,排名顺序为[C>A>B]

    但是如果在第4步,用户会选择B呢?我们可以根据逻辑假设,在第5步之前,他更喜欢B而不是A。因此,我们知道,排名列表将是[B>C>A],仅在2次比较中,它与第一种情况一样准确。因此,我们可以看到步骤的数量取决于用户的选择


    那么,以最少的比较次数对所有项目进行排名的正确或最有效的方法是什么?我考虑过逐字逐句地比较每一种可能的组合,并为每一项设置一个计数器,每当选择一项而不是另一项时,计数器就会上升。但是,如果采用这种方式,要进行的比较的数量将根据列表的大小呈指数增长,而这并不像上面的示例中那样是最有效的方式。我还考虑过使用一种简单的排序算法,用户可以“手动”进行比较,但我一般不太熟悉排序算法

    在Tom Scott的视频中,该网站随机挑选了两个项目,他使用了大量用户,通过概率和统计,问题得到了解决,他不必担心每个项目都被平均挑选以确保准确性。因为我只想让一个用户对项目进行排名,所以我需要找到一种方法来选择最有效的项目进行比较(我认为)。另一个不同之处是,我不会像Tom的版本那样拥有超过7000件物品。我想用它来排名,例如“所有迪斯尼电影”、“某些音乐类型”或“所有塞尔达视频游戏”,所以我非常确定我将拥有最多大约100个项目

    我的问题是:我在正确的轨道上吗?我应该使用一个简单的排序算法(如果是的话,我应该使用哪种算法?),还是唯一有效的数学方法就是比较每个组合?还是我错过了一些可以帮助我的东西?如果我对每一个组合都使用暴力,这显然是对物品进行排名的最简单、最准确的方法,但肯定不是最有效的方法。我认为比较的顺序以及我们比较的项目对效率的提高非常重要,这就是我所失去的


    我知道在这里问这个问题并不是一个传统的问题,但感谢您帮助我或引导我走上正确的道路。

    假设用户将创建一个项目的总排序,算法应该维护一个项目数量不断增加的全排序列表。获取下一个无序项,并使用二进制搜索所需的比较将其插入到有序列表中

    取下一个无序项,使用两个项的二进制搜索比较来插入该项

    重复此步骤,直到所有项目都已订购


    二进制搜索应尽量减少每个阶段的比较,并为用户提供每个新项目随时间推移的更有意义的比较。

    人员排序不必是可传递的。泽维尔可能喜欢亚当胜过本,本胜过嘉莉,但也可能喜欢嘉莉胜过亚当!我想你希望这些关系是可传递的。嗯,我在写我的问题时没有考虑到这一点。。。我认为它是可传递的。但我认为用户可以在偏好的上下文中做出不及物性的选择。如果我支持不及物排序,它是否会使算法复杂化,使算法变得像检查每个配对一样低效,还是会稍微影响比较的数量?还有没有任何排序算法可以在没有传递关系的情况下工作?它很可能会陷入一个循环,但如果有足够的响应,您可以计算响应的数量?