【问题标题】:What are the cases where tournament tree ( Winner Tree) can be helpful?锦标赛树(获胜者树)在哪些情况下会有所帮助?
【发布时间】:2018-07-23 20:17:42
【问题描述】:

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

【问题讨论】:

  • 好的,所以基本上我正在减少比较次数以换取空间..
  • 我认为它的实现与我所写的相同。即通过存储索引而不是实际值。这样我们就可以知道我们必须从哪个数组中将下一个元素添加到堆中。@JimMischel

标签: c++ merge binary-tree heap min-heap


【解决方案1】:

锦标赛树对tournament sort 很有用,它通常用于 N 路合并,有时用于外部排序。锦标赛排序被认为是堆排序的一种变体。

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

锦标赛树不是二叉堆的替代品,而是二叉堆的特定用途。

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 2016-10-17
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多