概率成对比较的模糊排序算法

时间:2018-07-26 06:58:02

标签: algorithm sorting

假设有n个玩家进行配对游戏。每场比赛的结果主要取决于两名球员的实力以及一点运气。

如何通过较少的游戏获得每个玩家的更准确排名?

1 个答案:

答案 0 :(得分:0)

在理想情况下,实力较强的玩家总是会获胜,您可以使用诸如mergesort或quicksort之类的比较排序对玩家列表进行排序,甚至可以使用排序网络以要求尽可能少的比较。由于这不是理想情况(涉及运气),因此这些算法可能会由于违反传递属性而无法产生正确的结果,但是我相信您可以通过一种方法来检测并纠正许多运气强度的实例。 ,如下所述:

首先,使用诸如mergesort之类的方法对玩家进行排序(违反传递属性不会导致无限循环)。将执行的比较转换为方向图,其中每个边都指向比赛的获胜者。将此原始图称为G。现在,对于G中每对连接的边,通过在“端点”顶点之间进行比较来添加第三条边(创建三角形),然后将更新的图放在G'中(不修改G) 。完成此操作后,检查G'是否存在循环-如果存在循环,则表示它们违反了传递属性。要解决这些问题,请将循环的成员与图形的其他成员进行比较,这不可避免地会产生更多的循环。这些周期之间的共同优势很可能是犯罪者,我们可以假设这是一次“幸运”的胜利。将所有此类边缘标记为否定。

解决了所有循环后,您可能会发现由于某些歧义而无法对图形进行拓扑排序。根据需要执行比较以解决歧义,但是请注意,这些新比较还不能保证其正确性(尚未)。若要解决此问题,请对图G1中的这些新边递归地重复上述过程,直到生成明确的图。将这些边插入G并进行拓扑排序。

您可以根据需要修改上述算法,以提高速度或准确性。为了精确起见,只需将每个边与更多冗余边进行比较,以更可靠地暴露和阐明周期。为了获得更高的速度,请测试较大的一组循环-而不是尝试查找长度为3的循环,而对“说”的“末端”进行比较-每6个边沿以查找长度为7的循环,等等。如果周期/“幸运胜利”非常罕见,那么您可以通过一次检查多个边来节省大量时间,尽管a)如果两个违规彼此“抵消”,您可能会忽略一个周期,并且b)您仍然会花费在较大的周期中找到特定的违规边缘的时间很多。