定义:
优先级队列是一种抽象数据类型,类似于常规队列或堆栈数据结构,但另外每个元素都具有"优先级"与之相关联。在优先级队列中,在具有低优先级的元素之前提供具有高优先级的元素。如果两个元素具有相同的优先级,则根据它们在队列中的顺序来提供它们。
实现:
实现优先级队列,未排序数组,排序数组和二进制堆数据结构是3实现策略。
具体而言,二进制堆实现策略可以使用 array 键来表示,
或
每个密钥为二进制节点,有两个孩子。
问题:
除了优先级队列实现之外,是否还有其他任何使用二进制堆数据结构的应用程序?
答案 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