因此,我试图找出以与以下结构的基于PQ的排序最相似的方式进行的算法。
以heapsort和d-heaps为例。 Heapsort使用2堆作为中间表示来对内容进行排序。对于heapsort,PQ是2堆,即使任何PQ都可以工作。
答案 0 :(得分:0)
我不确定1堆的意思。使用标准术语,1堆将是一个堆,每个节点有一个子节点:链表。那不会很好。
3堆只是d-ary heap,其中 d = 3。你说堆排序使用2堆。这并非总是如此。许多人使用2堆实现堆排序,通常是因为他们不知道他们可以使用3堆。这是不幸的,因为在许多情况下,3堆可能更有效。我和其他许多人已经使用3堆实现了堆排序。
如果通过“n-1堆”表示具有根的n-1个子节点的堆,那将不会非常有效。对于root的n-1个子项,当您删除最小项时,必须搜索所有n-1个子项以查找新的根。您也可以反复搜索线性列表中的下一个最大项目。 “n-1”堆排序与选择排序具有相同的性能。
平衡二叉搜索树的性能优于不平衡搜索树,但构建树的成本很高。堆排序的优点在于您可以在O(n)中构建堆。构建BST是O(n log n)。虽然删除最小节点是两者的O(log n)操作,但实际性能有利于堆。
所有这一切,任何可以作为优先级队列的数据结构都可以在基于pq的排序中使用。通常使用二进制堆(更常见的是, d -ary heap),因为它易于实现且非常高效。但是,根据您的应用程序,pairing heap之类的内容可能会胜过二进制堆。