Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 创建最小堆或最大堆_Algorithm_Time_Heap_Complexity Theory_Time Complexity - Fatal编程技术网

Algorithm 创建最小堆或最大堆

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时间来插入节点 优化方法首先将元素任意放置在一个平面上 二叉树,关于形状属性(如树所示 由数组表示)。然后从最底层开始 向上移动时,将每个子树的根向下移动,如中所示 删除算法,直到恢复堆属性。更多 特别是如果从某个高度开始的所有子树 (从

对于创建n个元素的最小堆或最大堆,创建堆所需的时间为O(nlogn)。因为每次插入都需要O(logn)时间,因此n个元素需要O(nlogn)时间


但在许多地方,有人认为堆的创建可以优化到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