如何将二进制堆转换为二项式队列

时间:2018-05-29 22:09:04

标签: algorithm data-structures queue heap

给定二进制堆,如何在线性时间-O(n)中将其转换为二项式队列?我想拆分堆但是我被卡住了,因为删除的时间是O(lg n)

1 个答案:

答案 0 :(得分:1)

假设您可以访问包含二进制堆的后备数组,并且可以在O(n)时间内迭代它,那么您可以通过执行n次插入来创建二项式堆。正如Wikipedia article所说:

  

只需创建一个新元素即可将新元素插入堆中   堆只包含此元素,然后将其与   原始堆。由于合并,插入需要O(log n)时间。然而,   在一系列n次连续插入中,insert已经摊销   O(1)的时间(即常数)。

换句话说,在二项式堆中插入n将需要O(n)时间。

通过使用标准二进制堆删除操作,您无法在O(n)时间内执行此操作。如您所述,每次删除都是O(log n),导致O(n log n)复杂度。