【发布时间】:2018-07-23 20:17:42
【问题描述】:
在锦标赛树的实现中,额外的空间被用作将要比较的数据设置在树的叶子上然后进行比较。我读到当我们必须合并 k 个排序数组时很有帮助。现在,假设我们要合并 k 个排序数组。如果不是存储实际值,而是存储索引并创建一个最小堆,然后在 min_heap 实现中使用自定义比较器函数,该函数按该索引处的值排序。这样我们就可以知道要添加到堆中的下一个元素。这不是更好的实施,因为它可以节省我们一半的空间吗?此外,时间复杂度也将相同。上述实现不是比锦标赛树方法更好吗?
那么,锦标赛树在哪些情况下会有所帮助?
【问题讨论】:
-
好的,所以基本上我正在减少比较次数以换取空间..
-
我认为它的实现与我所写的相同。即通过存储索引而不是实际值。这样我们就可以知道我们必须从哪个数组中将下一个元素添加到堆中。@JimMischel
标签: c++ merge binary-tree heap min-heap