二进制堆的所有目的

时间:2017-01-04 06:16:38

标签: c data-structures language-agnostic priority-queue binary-heap

  

定义:

     

优先级队列是一种抽象数据类型,类似于常规队列或堆栈数据结构,但另外每个元素都具有"优先级"与之相关联。在优先级队列中,在具有低优先级的元素之前提供具有高优先级的元素。如果两个元素具有相同的优先级,则根据它们在队列中的顺序来提供它们。

     

实现:

     

实现优先级队列未排序数组排序数组二进制堆数据结构是3实现策略。

     

具体而言,二进制堆实现策略可以使用 array 键来表示,

     

enter image description here

     

     

每个密钥二进制节点,有两个孩子。

     

enter image description here

问题:

除了优先级队列实现之外,是否还有其他任何使用二进制堆数据结构的应用程序?

2 个答案:

答案 0 :(得分:0)

二进制堆可用于在O(logn)时间内提取(最大或最小)元素。可以利用此属性在许多算法中使用,以获得更好的运行时间。

例如,一旦我在k-merge排序算法中使用它来提高k-merge排序的排序步骤的时间效率。简而言之,它制作了k子阵列的二进制堆,并且可以在线性时间内实现排序,这比合并排序的通常排序步骤更好。

它也用于Dijkstra的算法,Prim的算法,以减少它们的运行时间。

您还可以查看here

答案 1 :(得分:0)

Binary堆还有另一个有用的(和主要的)应用程序:HeapSort。 HeapSort的开销高于QuickSort,但最坏的情况是O(n log n)与QuickSort的O(n * n)。一旦间隔足够短,可以通过切换到HeapSort来改进QuickSort以获得最坏的O(n log n)情况 - 这称为IntroSort,并且是STL和C ++标准库中使用的。见https://en.wikipedia.org/wiki/Introsort