「数理逻辑」| 赛马!

2020-12-08  本文已影响0人  彭旭锐

前言


系列文章

【持续更新】


1. 赛马

1.1 题目描述

给定 25 匹马与 5 条赛道,一个赛道只能容纳一匹马,每轮比赛只能得到 5 匹马之间的快慢程度,而不是速度,求决胜 1,2,3名至少多少轮。

1.2 解题关键

欲求得 25 匹马中的前三名,可以先求得较小规模问题中的前三名,再合并小规模问题的解得出最终解。

并查集(一种数据结构)中,会使用根节点来代表一个集合,这种方法叫做代表元法。我们可以借鉴这种 “代表元” 的思想,让一组马中跑的最快的一匹来代表整组马。

举个例子,给定一组赛马 \{A_1,A_2,A_3,A_4,A_5\}A_1为这组马中冠军马,若有 B>A_1,则自然有 B>A(即:如果 B 比 A 组中跑的最快的一匹马还快,则 B 比 A 组所有马都快)。

提示: 若不了解并查集,请务必阅读我之前写过的一篇文章:《数据结构 | 并查集 & 联合 - 查找算法》

1.3 题解

首先,我们将 25 匹赛马分为 5 组:

A 组:\{A_1,A_2,A_3,A_4,A_5\}

B 组:\{B_1,B_2,B_3,B_4,B_5\}

C 组:\{C_1,C_2,C_3,C_4,C_5\}

D 组:\{D_1,D_2,D_3,D_4,D_5\}

E 组:\{E_1,E_2,E_3,E_4,E_5\}

让每组马进行组内比赛,得到组内排名,假设正好马的快慢与编号一致,即:[A_1>A_2>A_3>A_4>A_5](此时进行了 5 轮比赛)。

因为组内排名第四与第五名不可能竞争全场前三名,所以排除每一组的第四与第五名。

其次,每一组跑得最快的一匹马作为代表元参与一轮 “代表赛”,假设比赛结果是:[A_1>B_1>C_1>D_1>E_1]

此时,A_1是代表赛中最快的,所以A_1一定是全场第一名,而

此时,B_1是代表赛中的第二名,最快情况下B_1同时也是全场的第二名,则B_3失去前三名的竞争资格;

此时,C_1是代表赛的第三名,最快情况下C_1同时也是全场的第三名,则{C_2、C_3}失去前三名的竞争资格;

此时,D_1D_1是代表赛的四五名,说明 D 组和 E 组都失去了前三名的竞争资格;

此时,剩余未知的马为:

\{A_2,A_3\}
\{B_1,B_2\}
\{C_1\}

加赛一轮,总共进行 7 轮可以选出前三名。

论毕。


创作不易,你的「三连」是丑丑最大的动力,我们下次见!

上一篇下一篇

猜你喜欢

热点阅读