寻找冠军和第二名

时间:2019-03-22 18:15:23

标签: algorithm tree time-complexity binary-tree heap

我正在浏览this帖子,内容涉及在最少的比较中寻找获胜者和第二获胜者的复杂性。

该帖子说,将需要进行n + log(n) - 2比较。我了解需要n-1比较才能建立堆并赢得赢家。但除此之外,我无法理解要找出第二名获胜者还需要进行额外的log(n) - 1比较。

据我所知,要找出第二名获胜者还需要进行一定数量的比较,因为我们只需要从构造好的堆中找到与获胜者竞争的两个最近的球员,这些加起来不会log n - 1

1 个答案:

答案 0 :(得分:0)

一场由tail名参与者组成的平衡,单人淘汰赛有n个回合:每回合有一半参与者被淘汰;只有最后两个会打满所有k = ceil(log2(n))回合。

在此示例中,您只需比较获胜者的最后两个对手的原因是仅显示了2个回合。在“现实世界”中,最终冠军淘汰的任何一支球队可能都是第二好的(在给定的假设下,优势在任何两个球员之间都是不变的,在所有球员之间都是可传递的)。 / p>

因此,您必须比较输给冠军的k个玩家。由于每次比较都会淘汰一名玩家,因此您需要进行k次比较才能找到剩下的唯一一枚银牌候选人。