Algorithm 二项式堆:初始构建比连续插入更有效的方法?

Algorithm 二项式堆:初始构建比连续插入更有效的方法?,algorithm,heap,binomial-heap,Algorithm,Heap,Binomial Heap,是否有一种方法可以用n个给定元素(最坏情况复杂度低于O(n logn))来初始构造二项堆,即使用n个连续插入?(我知道insert的摊销成本是O(1),因此构建的平均时间复杂度更小。)对于二进制堆,有一种更有效的构建实现,它将所有n个元素放在一个二叉树中,并按相反的顺序对前一半元素执行heapify/siftDown。只是想知道:对于二项式堆,是否存在类似聪明的东西?实际上,将所有n个值插入堆只需要时间O(n)。尽管二项式堆插入的最坏运行时是O(logn),但平均而言,它要低于O(logn) 这

是否有一种方法可以用n个给定元素(最坏情况复杂度低于O(n logn))来初始构造二项堆,即使用n个连续插入?(我知道insert的摊销成本是O(1),因此构建的平均时间复杂度更小。)对于二进制堆,有一种更有效的构建实现,它将所有n个元素放在一个二叉树中,并按相反的顺序对前一半元素执行heapify/siftDown。只是想知道:对于二项式堆,是否存在类似聪明的东西?

实际上,将所有n个值插入堆只需要时间O(n)。尽管二项式堆插入的最坏运行时是O(logn),但平均而言,它要低于O(logn)

这里有一种使用摊销分析的方法。在二项式堆中的每棵树上放置一个信用。无论何时进行插入,如果涉及合并k个不同的树,则实际运行时为Θ(1+k)。在此过程中,我们还将花费k个积分,每棵树合并一个,因此摊销成本为O(1)。因此,假设不存在中间删除,则任何n个插入到空二项式堆中的序列都需要时间O(n)。这与二进制堆不同,即使您事先不知道元素n的数量,也可以工作

或者,您可以使用惰性二项堆,其中插入需要最坏的时间O(1),删除需要摊销O(logn)。在这种情况下,一系列n次插入也需要O(n)个时间


希望这有帮助

如果插入按O(1)摊销,这意味着n个插入将花费O(n)的总时间。感谢您的解释,特别是关于延迟插入的部分。