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

标签 algorithm tree time-complexity binary-tree heap

我正在浏览 this发布关于在最少的比较中找到获胜者和第二获胜者的复杂性。

该帖子说要进行 n + log(n) - 2 比较才能做到这一点。我知道需要进行 n-1 比较才能构建堆并获得获胜者。但除此之外,我无法理解需要额外的 log(n) - 1 比较才能找出第二个获胜者。

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

最佳答案

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

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

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

关于algorithm - 寻找获胜者和第二名获胜者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55305615/

相关文章:

php - 在数组中找到最大总和

c++ - 如何找到二分查找算法的迭代次数?

c - 在c中递归按顺序打印二叉树

algorithm - 证明优先队列操作的时间复杂度

arrays - 采访 : sumPairs(array) output the sum of all summed pairs in O(n) time

algorithm - 向给定数字四舍五入

algorithm - 选择的 gimp 羽化边缘背后的算法是什么?

javascript - 使用 QUERY 或仅使用 CSS 的水平树/组织结构图/uml?

tree - Scheme中n叉树的map函数

java - 用于处理列表的所有连续子序列的简单代码的算法复杂度 : n^2 or n^3?