在锦标赛树的实现中,多余的空间被用作要比较的数据,将其设置在树的叶子上然后进行比较。我读到当我们必须合并k个排序的数组时这很有用。现在,假设我们要合并k个排序的数组。如果不是存储实际值,而是存储索引并创建一个最小堆,然后在min_heap实现中使用自定义比较器函数,该函数按该索引处的值排序。这样我们就可以知道要添加到堆中的下一个元素。这样做会更好吗,因为它可以节省一半的空间吗?而且,时间复杂度也将是相同的。上述实现难道不是比比赛树方法更好吗?那么,在什么情况下锦标赛树会有所帮助?

最佳答案

比赛树对于tournament sort很有用,通常用于N向合并,有时还用于外部排序。锦标赛排序被视为堆排序的一种变体。

另一个应用程序是查找多个排序数组的中位数,或者查找列表中的前(或后)k个项目。

锦标赛树不是二进制堆的替代品,而是二进制堆的特定用法。

07-27 20:00