我觉得它们彼此非常相似,只是有些概念不同。在外部排序中,它们的功能基本相同,即在k次运行中找到最小值/最大值。那么两者之间有什么明显的区别吗?

最佳答案

在大多数情况下,失败者的树和堆是非常相似的。但是,有一些重要的区别。失败者树(因为它提供了每场比赛的失败者)将包含重复节点。由于堆是一种数据存储结构,因此它不会包含这些冗余。两者之间的另一个区别是,失败者树必须是完整的二叉树(因为它是锦标赛树的一种),但是堆不一定是二叉树。

最后,要了解失败者树的特定质量,请考虑以下问题:
假设我们有k个序列,每个序列以非降序排列,然后将以非降序合并为一个序列。这可以通过将具有最小键的元素重复传输到输出数组来实现。必须从k个序列中的前导元素中找到最小的 key 。通常,这需要对每个传输的元素进行k − 1个比较。但是,对于失败者树,可以将其减少到每个元素的log2 k比较。

资料来源:《数据结构和应用手册》,Dinesh Mehta

10-07 15:49