在我当地的壁球俱乐部,有一个梯子的工作原理如下。
- 在本赛季开始时,我们会在单独的一行中构建一个表,其中包含俱乐部的每个成员的姓名。
- 然后,我们在每个名字旁边写上获胜游戏数和玩游戏数(格式:玩家获胜/游戏)。
因此,在本赛季开始时,表格如下所示:
Carol 0/0
Billy 0/0
Alice 0/0
Daffyd 0/0
任何两名玩家均可参加比赛,其中一名玩家获胜。如果最接近桌面底部的玩家获胜,则将切换玩家的位置。然后,我们重复步骤2,更新每个玩家旁边的获胜次数和比赛数。例如,如果爱丽丝击败比利,我们有
Carol 0/0
Alice 1/1
Billy 0/1
Daffyd 0/0
这些比赛在整个赛季中持续进行,最终导致球员按实力顺序排列。
不幸的是,更新是以相当偶然的方式发生的,因此会出错。以下是无效表格的一些示例,也就是说,对于某些开始顺序(我们忘记了本赛季开始时使用的顺序)以及比赛和结果的顺序,无法正确按照上述步骤操作而无法生成的表格:
Alice 0/1
Billy 1/1
Carol 0/1
Daffyd 0/0
Alice 2/3
Billy 0/1
Carol 0/0
Daffyd 0/0
Alice 1/1
Billy 0/2
Carol 2/2
Daffyd 0/1
给定一个表,我们如何有效地确定它是否有效?我们可以从以下几点开始:
名称的顺序无关紧要,因为我们忘记了原始的起始顺序。
获胜总数应为比赛总数的一半。(这表明上面的第一个示例无效。)
- 假设该表有效。然后是一个多图 -一个允许多个边但没有循环的图-每个顶点对应一个玩家,每个边对应一个比赛。然后,每个玩家玩的游戏总数与多张图中的玩家顶点程度相对应。因此,如果不存在具有适当顶点度的多重图形,则该表必须无效。例如,不存在一个度数为1的顶点和度数为3的顶点的多重图形,因此第二个示例无效。[我们可以有效地检查这种多重图的存在。]
因此,我们有两次检查可以申请开始,但是这仍然允许使用无效的表,例如第三个示例。要查看该表是否无效,我们可以向后工作,并尽一切可能出现该表。
我想知道是否有人可以考虑多项式时间(以玩家数和游戏数为准)算法来解决此决策问题?