用于比较一对一锦标赛的有效算法

Posted

技术标签:

【中文标题】用于比较一对一锦标赛的有效算法【英文标题】:Efficient algorithm for comparing one-on-one tournaments 【发布时间】:2022-01-24 07:32:16 【问题描述】:

我正在考虑做一个简单的程序,它基本上有一些项目的列表 - 例如食物 - 并将两种食物相互配对,供用户从这两个选项中选择他或她最喜欢的.最终,将出现一个排名候选人名单。在幕后,我想到了两个非常简单的“算法”。

    通过每对可能的配对来完美地为列表评分。当列表中有很多项目时,对于用户来说似乎真的很乏味。

    简单的消除。两种食物进入,一种离开下一轮。但我真的无法获得排名,而只是对性能类别的一般估计。

所以我想知道,像这样的一对一“锦标赛”还有哪些其他排名系统?

【问题讨论】:

我认为,当谈到品味时,这个算法之王将很难做到正确。考虑一下,你有苹果、橙子和香蕉。你想根据一个人的口味选择对它们进行排名,所以你问什么是最好的,苹果还是橙子。人回应苹果。然后你问,橙子还是香蕉,这个人回答橙子。然后你问,苹果还是香蕉,对方回答香蕉。所以现在你有一个循环,没有明确的排名,因为顺序是“苹果 > 橙子 > 香蕉 > 苹果”。交换品味不是一回事。 在实际比赛中,这暗示如果您让 X 与 Y 和 Y 与 Z 对战,并且 Y 胜过 Z 并且 X 胜过 Y,那么 X 也隐含地胜过 Z,而不必参加比赛,因为选择是可交换的。我认为这不一定适用于口味。如果我喜欢苹果胜过橘子,这并不意味着我喜欢苹果胜过所有我喜欢橘子的东西。 在这种情况下获得真正的排名系统的唯一方法可能是首先向该人展示所有选项,然后让他们选择 1 ,如“你宁愿选择什么”。然后从列表中删除该选项并再次询问“现在您更愿意选择什么”,然后继续前进,直到您只剩下一个选项,即最后一个。 我建议阅读有关 ELO 评分系统的信息:en.wikipedia.org/wiki/Elo_rating_system 这种评分系统用于此类锦标赛,其好处是您无需计算所有可能的配对,但是您进行的比较越多,评分就越精确。如果您计划让不同的人参与,您可能需要进行一些自定义。 "然后 X 也隐含地赢得了 Z,而不必竞争,因为选择是可交换的" 我假设您的意思是 transitive 而不是 可交换?但实际上,在真正的锦标赛中,这是众所周知的错误。事实上,在这种情况下避免让 X 与 Z 对抗的主要论点是专门避免(可能的)循环 X > Y > Z > X,这会使决定获胜者变得更加困难。 【参考方案1】:

如果你想获得一个比较少的排名,那将很难击败Merge-Insertion sort。它在实践中很少使用,因为要找出下一个要进行的比较需要大量工作。但是计算机时间相对于人类时间来说是便宜的,因此投入工作以减少人类的工作是值得的。

【讨论】:

以上是关于用于比较一对一锦标赛的有效算法的主要内容,如果未能解决你的问题,请参考以下文章

一文看懂编程中的基本数据结构与算法思想

干货:一文看懂编程中的基本数据结构与算法思想

用于比较来自 2 个不同数组的点的最近对算法

一对多多列加入 Spring Data JPA

一对一视频app开发选择如何合适算法

算法-冒泡排序