【发布时间】:2015-12-10 13:26:42
【问题描述】:
目前正在阅读Algorithms book。 chapter 2.4heapsort 基于优先级队列(p.328)实现的问答部分有以下段落(让我们关注优先级队列堆,而不是堆排序):
问。我仍然不清楚优先队列的目的。究竟为什么 难道我们不只是排序,然后按升序考虑项目吗? 排序后的数组?
A.在 TopM 和 Multiway 等一些数据处理示例中, 数据总量太大而无法考虑排序(甚至 存储在内存中)。如果您正在寻找前十名的条目 十亿项,您真的要对十亿项数组进行排序吗?和 优先级队列,您可以使用十项优先级队列来实现。 在 其他示例,所有数据甚至在任何时候都不一起存在 及时:我们从优先队列中取出一些东西,处理它,然后作为 处理它的结果可能会为优先级添加更多内容 排队。
TopM、Multiway 是优先队列的简单客户端。本书讲述了堆排序的两个阶段:
- 堆构建(作者使用优先队列堆,我们感兴趣)
- 排序
在我的理解中,堆构建是几乎排序(“堆顺序”)。为了构建一个堆,您实际上需要访问原始数据集中的每个项。
问题:谁能说明我在上面引用中粗体所写的作者观点?我们如何在不访问所有项目的情况下构建堆?我在这里想念什么?为 clarif 干杯。
【问题讨论】:
-
简短的版本是堆适用于外部操作——即使用磁盘或磁带;此外,堆与堆排序不同。 Heapsort 在概念上创建一个堆,然后弹出每个项目。例如top N,只需要弹出top N项即可。
标签: algorithm heap priority-queue