将n个元素插入已包含n个元素的二进制堆的渐近时间复杂度

时间:2011-11-04 15:22:59

标签: algorithm data-structures asymptotic-complexity binary-heap

假设我们有一个包含n个元素的二进制堆,并希望插入更多元素(不一定是一个接一个)。这需要的总时间是多少?

我认为这是theta(n logn),因为一次插入需要登录。

3 个答案:

答案 0 :(得分:5)

给定:n个元素的堆和n个要插入的元素。所以最后会有2 * n个元素。因为堆可以用2种方式创建1.连续插入和2.构建堆方法。这些构建堆方法需要花费O(n)时间来构造堆,这将在下面解释 How can building a heap be O(n) time complexity?。因此所需的总时间为O(2 * n),与O(n)

相同

答案 1 :(得分:3)

假设我们得到了:

  • 标准二进制堆实现的优先级队列 H 在阵列上实现
  • n 当前堆的大小

我们有以下插入属性:

  • W(n)= WorstCase(n)=Θ(lg n)(Theta)。 - > W(n)=Ω(lg n)且W(n)= O(lg n)
  • A(n)= AverageCase(n)=Θ(lg n)(Theta)。 - > W(n)=Ω(lg n)且W(n)= O(lg n)
  • B(n)= BestCase(n)=Θ(1)(Theta)。 - > W(n)=Ω(1)且W(n)= O(1)

因此对于每个案例,我们都有

  • T(n)=Ω(1)且T(n)= O(lg n)

WorstCase是什么时候,我们插入新的最小值,所以up-heap必须遍历整个分支。

BestCase就是这样,对于最小堆(顶部最小的堆),我们插入BIG(更新分支上最大)值(所以up-heap立即停止)。

您已经询问过包含n个元素的堆上的n个操作系列, 它的大小会增长

from n to 2*n

什么渐近是...

n=Θ(n)
2*n=Θ(n)

简化了我们的方程式。 (我们不必担心 n 的增长,因为它的增长是恒定的因素。)

因此,我们有“n次插入”操作:

  • Xi(n)= X_for_n_insertions(n)
    • Wi(n)=Θ(n lg n)
    • Ai(n)=Θ(n lg n)
    • Bi(n)=Θ(n)
  • 暗示,对于“所有情况”:
    • Ti(n)=Ω(n)且Ti(n)= O(n lg n)

P.S。要显示ThetaΘ,OmegaΩ符号,您需要安装/兼容UTF-8。

答案 2 :(得分:0)

它不是theeta(nlogn)...它的顺序(nlogn),因为一些插入可能需要少于精确的logn时间...因此对于n次插入,它将花费时间< = nlogn

<强> =&GT;时间复杂度= O(nlogn)