从整数流创建最大堆
Creation of max Heap from stream of integer
因为我知道如果数组中有 n 个元素并且我想创建一个最大堆它需要 o(n) 因为逻辑是我们从最后一个父级应用 heapify root.
但我的问题是假设是否有整数流即将到来并且我想在堆中插入元素然后在插入 n 个元素之后我的时间是多少 complexity.I 认为它会进入 o(nlogn).
因为完成每一关的操作次数为
(2^L)*L where L will be depth of tree which will start from zero to ((logn)-1)
Sum=0+1*(2^1)+2*(2^2)...........+(logn-1)(2^(logn-1))
当我对它进行求和时,我得到了 nlogn + constant.So 请解释一下它有什么问题?
您的分析是正确的。在最坏的情况下,将 n 个元素按顺序插入堆中将导致 Θ(n log(n)) 时间。
当堆有i个元素,插入第i + 1个元素,那么最坏情况下,将需要一直向上冒泡到顶部,即 Θ(log(i))。因此,在最坏的情况下,操作序列的复杂度是
∑i = 1, ..., nΘ(log(i)) = Θ(log(i!))= Θ(n日志(n)),
最后一部分来自 Stirling's Approximation。
因为我知道如果数组中有 n 个元素并且我想创建一个最大堆它需要 o(n) 因为逻辑是我们从最后一个父级应用 heapify root.
但我的问题是假设是否有整数流即将到来并且我想在堆中插入元素然后在插入 n 个元素之后我的时间是多少 complexity.I 认为它会进入 o(nlogn).
因为完成每一关的操作次数为
(2^L)*L where L will be depth of tree which will start from zero to ((logn)-1)
Sum=0+1*(2^1)+2*(2^2)...........+(logn-1)(2^(logn-1))
当我对它进行求和时,我得到了 nlogn + constant.So 请解释一下它有什么问题?
您的分析是正确的。在最坏的情况下,将 n 个元素按顺序插入堆中将导致 Θ(n log(n)) 时间。
当堆有i个元素,插入第i + 1个元素,那么最坏情况下,将需要一直向上冒泡到顶部,即 Θ(log(i))。因此,在最坏的情况下,操作序列的复杂度是
∑i = 1, ..., nΘ(log(i)) = Θ(log(i!))= Θ(n日志(n)),
最后一部分来自 Stirling's Approximation。