How can building a heap be O(n) time complexity?

后端 未结 17 2410
礼貌的吻别
礼貌的吻别 2020-11-22 05:33

Can someone help explain how can building a heap be O(n) complexity?

Inserting an item into a heap is O(log n), and the insert is repeated n/2 times (t

17条回答
  •  情深已故
    2020-11-22 05:47

    As we know the height of a heap is log(n), where n is the total number of elements.Lets represent it as h
       When we perform heapify operation, then the elements at last level(h) won't move even a single step.
       The number of elements at second last level(h-1) is 2h-1 and they can move at max 1 level(during heapify).
       Similarly, for the ith, level we have 2i elements which can move h-i positions.

    Therefore total number of moves=S= 2h*0+2h-1*1+2h-2*2+...20*h

                                                   S=2h {1/2 + 2/22 + 3/23+ ... h/2h} -------------------------------------------------1
    this is AGP series, to solve this divide both sides by 2
                                                   S/2=2h {1/22 + 2/23+ ... h/2h+1} -------------------------------------------------2
    subtracting equation 2 from 1 gives
                                                   S/2=2h {1/2+1/22 + 1/23+ ...+1/2h+ h/2h+1}
                                                   S=2h+1 {1/2+1/22 + 1/23+ ...+1/2h+ h/2h+1}
    now 1/2+1/22 + 1/23+ ...+1/2h is decreasing GP whose sum is less than 1 (when h tends to infinity, the sum tends to 1). In further analysis, let's take an upper bound on the sum which is 1.
    This gives S=2h+1{1+h/2h+1}
                        =2h+1+h
                        ~2h+h
    as h=log(n), 2h=n

    Therefore S=n+log(n)
    T(C)=O(n)

提交回复
热议问题