寻找获胜者和第二名获胜者

Finding winner and second winner

我正在经历 this post 关于在最少比较中找到获胜者和第二获胜者的复杂性。

post 表示需要进行 n + log(n) - 2 次比较。我知道需要进行 n-1 次比较才能构建堆并获得获胜者。但除此之外,我无法理解需要额外 log(n) - 1 比较才能找出第二个获胜者。

据我所知,还需要不断进行比较才能找出第二个获胜者,因为我们只需要从构造的堆中找到与获胜者竞争的两个最近的玩家,而这并不加起来log n - 1.

n 名参赛者的平衡单败淘汰赛有 k = ceil(log2(n)) 轮:每轮淘汰一半的参赛者;只有最后两个会玩所有 k 轮。

在这个例子中,您只需要比较获胜者的最后两个对手的原因是只显示了 2 轮。在 "real world" 中,被最终冠军淘汰的 任何 球队可能是第二好的(在给定的假设下,优势在任何两个玩家之间是不变的,并且在所有玩家之间传递玩家)。

因此,你必须比较输给冠军的k名选手。由于每次比较都会淘汰一名选手,因此您需要 k-1 次比较才能找出剩下的银牌候选人。