日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

构建二叉堆时间复杂度的证明

發(fā)布時間:2024/9/30 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 构建二叉堆时间复杂度的证明 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://blog.csdn.net/linuxtiger/article/details/7172258

如果僅從代碼上直觀觀察,會得出構(gòu)造二叉堆的時間復(fù)雜度為O(n㏒n)的結(jié)果,這個結(jié)果是錯的,雖然該算法外層套一個n次循環(huán),而內(nèi)層套一個分治策略下的㏒n復(fù)雜度的循環(huán),該思考方法犯了一個原則性錯誤,那就是構(gòu)建二叉堆是自下而上的構(gòu)建,每一層的最大縱深總是小于等于樹的深度的,因此,該問題是疊加問題,而非遞歸問題。那么換個方式,假如我們自上而下建立二叉堆,那么插入每個節(jié)點都和樹的深度有關(guān),并且都是不斷的把樹折半來實現(xiàn)插入,因此是典型的遞歸,而非疊加。


在做證明之前,我們的前提是,建立堆的順序是bottom-top的。

正確的證明方法應(yīng)當(dāng)如下:


1. 具有n個元素的平衡二叉樹,樹高為㏒n,我們設(shè)這個變量為h。

2. 最下層非葉節(jié)點的元素,只需做一次線性運算便可以確定大根,而這一層具有2^(h-1)個元素,我們假定O(1)=1,那么這一層元素所需時間為2^(h-1)?× 1。

3. 由于是bottom-top建立堆,因此在調(diào)整上層元素的時候,并不需要同下層所有元素做比較,只需要同其中之一分支作比較,而作比較次數(shù)則是樹的高度減去當(dāng)前節(jié)點的高度。因此,第x層元素的計算量為2^(x)?× (h-x)。

4. 又以上通項公式可得知,構(gòu)造樹高為h的二叉堆的精確時間復(fù)雜度為:

S = 2^(h-1)?× 1 + 2^(h-2)?× 2 + …… +1?× (h-1) ?①


通過觀察第四步得出的公式可知,該求和公式為等差數(shù)列和等比數(shù)列的乘積,因此用錯位想減發(fā)求解,給公式左右兩側(cè)同時乘以2,可知:

2S = 2^h?× 1 +?2^(h-1)?× 2+ …… +2?× (h-1) ? ? ?②


用②減去①可知: S =2^h?× 1 - h +1 ? ? ? ?③


將h =?㏒n 帶入③,得出如下結(jié)論:


S = n -?㏒n +1 = O(n)


結(jié)論:構(gòu)造二叉堆的時間復(fù)雜度為線性得證。



上題有些小細(xì)節(jié)推導(dǎo)錯誤,整體思路是對的

總結(jié)

以上是生活随笔為你收集整理的构建二叉堆时间复杂度的证明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。