面试常考题 浅谈 赛马问题
题目
一共有25匹马,有一个赛场,赛场有5个赛道,就是说最多同时可以有5匹马一起比赛。假设每匹马都跑的很稳定,不用任何其他工具,只通过马与马之间的比赛,试问,最少得比多少场才能知道跑得最快的5匹马?
思考
朴素想法
最朴素的想法,就是
- 分为5组 组内跑一次
- 5个组的组内第一 跑一次
- 然后接下来就跟优先队列一样,每次跑之前被挑出去的组的后一个
所以这样的想法就是 5(组内跑)+5(一次能跑出一个top1) 10 次
优化思想
假设我们现在已经跑完top3了,假设top3是 (A1, A2, A3)
那么还剩 这5个可能是 top4 和 top5
A4, A5
B1 B2
C1
所以 最后 top4和top5一次就能跑完
所以 我能想到的就是 9次 跑出来top5
欢迎参与讨论