寻找获胜者和第二名获胜者
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
次比较才能找出剩下的银牌候选人。
我正在经历 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
次比较才能找出剩下的银牌候选人。