Algorithm 创建最小堆或最大堆
对于创建n个元素的最小堆或最大堆,创建堆所需的时间为O(nlogn)。因为每次插入都需要O(logn)时间,因此n个元素需要O(nlogn)时间Algorithm 创建最小堆或最大堆,algorithm,time,heap,complexity-theory,time-complexity,Algorithm,Time,Heap,Complexity Theory,Time Complexity,对于创建n个元素的最小堆或最大堆,创建堆所需的时间为O(nlogn)。因为每次插入都需要O(logn)时间,因此n个元素需要O(nlogn)时间 但在许多地方,有人认为堆的创建可以优化到O(n)时间,即线性时间?但没有明确说明如何进行优化?最佳方法不需要logn时间来插入节点 优化方法首先将元素任意放置在一个平面上 二叉树,关于形状属性(如树所示 由数组表示)。然后从最底层开始 向上移动时,将每个子树的根向下移动,如中所示 删除算法,直到恢复堆属性。更多 特别是如果从某个高度开始的所有子树 (从
但在许多地方,有人认为堆的创建可以优化到O(n)时间,即线性时间?但没有明确说明如何进行优化?最佳方法不需要logn时间来插入节点 优化方法首先将元素任意放置在一个平面上 二叉树,关于形状属性(如树所示 由数组表示)。然后从最底层开始 向上移动时,将每个子树的根向下移动,如中所示 删除算法,直到恢复堆属性。更多 特别是如果从某个高度开始的所有子树 (从底部)已经“heapified”,树在高处
h+1
可以通过沿
构建最大堆时的最大值子堆
,或最小值子堆
构建最小堆时的子对象。此过程需要O(h)
swap
每个节点的操作数。在这种方法中,大部分的健康需要时间
放在下层。由于堆的高度是logn
,
高度处的节点数为h
。因此,成本
对所有子树进行HEAPIzing是:
h=0∑对数n/2h+1=O(n*
h=0∑lognh/2h),小于
O(n*h=0∑∞h/2h)
它等于O(n)
来源:插入节点时,最佳方法不需要logn时间
优化方法首先将元素任意放置在一个平面上
二叉树,关于形状属性(如树所示
由数组表示)。然后从最底层开始
向上移动时,将每个子树的根向下移动,如中所示
删除算法,直到恢复堆属性。更多
特别是如果从某个高度开始的所有子树
(从底部)已经“heapified”,树在高处
h+1
可以通过沿
构建最大堆时的最大值子堆
,或最小值子堆
构建最小堆时的子对象。此过程需要O(h)
swap
每个节点的操作数。在这种方法中,大部分的健康需要时间
放在下层。由于堆的高度是logn
,
高度处的节点数为h
。因此,成本
对所有子树进行HEAPIzing是:
h=0∑对数n/2h+1=O(n*
h=0∑lognh/2h),小于
O(n*h=0∑∞h/2h)
它等于O(n)
资料来源:也许是一个更好的地方。可能是一个更好的地方问。您可能想要对源材料进行属性化:您可能想要对源材料进行属性化:
since h / 2h converges to 2 as it is an infinite series