我觉得他们彼此非常相似,除了一些概念。在外部排序中,它们的功能基本相同,即在k 运行中找到最小/最大值。那么两者之间是否存在一些显着差异?
答案 0 :(得分:0)
在大多数情况下,失败者的树和堆非常相似。但是,有一些重要的区别。失败者树(因为它提供了每场比赛的失败者)将包含重复节点。由于堆是一种数据存储结构,因此它不会包含这些冗余。两者之间的另一个区别是,失败者树必须是完整的二叉树(因为它是锦标赛树的一种),但是堆不一定是二叉树。
最后,要了解失败者树的特定质量,请考虑以下问题: 假设我们有k个序列,每个序列以非降序排列,然后将以非降序合并为一个序列。这可以通过将具有最小键的元素重复传输到输出数组来实现。必须从k个序列的前导元素中找到最小的密钥。通常,这将需要对每个传输的元素进行k − 1个比较。但是,如果使用失败者树,则可以将每个元素的比较减少到log2 k。
来源:Dinesh Mehta数据结构和应用手册