【发布时间】:2017-05-18 08:40:27
【问题描述】:
定义:
优先级队列是一种抽象数据类型,类似于常规队列或堆栈数据结构,但其中每个元素都有一个与之关联的“优先级”。在优先级队列中,优先级高的元素先于优先级低的元素提供服务。如果两个元素具有相同的优先级,则按照它们在队列中的顺序提供服务。
实施:
实现优先队列、未排序数组、排序数组和二进制堆数据结构是3种实现策略。
具体来说,二叉堆的实现策略可以用array的keys来表示,
或
每个 key 作为 二元节点 有两个孩子。
问题:
除了优先级队列的实现,他们还有其他使用二叉堆数据结构的应用吗?
【问题讨论】:
-
另见堆排序。
-
并非如此。甚至可以说,堆排序只是填充优先级队列,然后按顺序拉出。二叉堆是一个优先队列。更重要的问题是优先级队列的应用是什么,哪些应用最好用二叉堆实现,哪些应该使用其他优先级队列实现。
-
1.请为您从中复制的来源提供正确的归属。见stackoverflow.com/help/referencing。 2. 要求列出所有二进制堆的应用程序可能过于宽泛。 3. 你做过什么研究?您是否查看过数据结构教科书以了解它们如何处理堆?
-
“不是。” - 对真的。 “可以说,即使堆排序也只是填充优先级队列,然后按顺序拉出。” - 没有有效地争论。 HeapSort 排序——这就是应用程序。它在内部使用堆是重言式。之所以使用 HeapSort,并不是因为它内部有堆,而是因为它的性能特点。见en.wikipedia.org/wiki/Introsort
-
@JimBalter:我认为您是说 Heapsort 是一个单独的应用程序,因为“优先队列排序”不会那么快;堆的性能特征(特别是,能够就地重新排列数组以在 O(n) 中构建二进制堆)使得使用二进制堆优于仅使用任何旧的优先级队列。你说的是这个吗?
标签: c data-structures language-agnostic priority-queue binary-heap