版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、6.1 堆 (二叉)堆數(shù)據(jù)結(jié)構(gòu)是一種數(shù)組對(duì)象,它可以被視為一顆完 全二叉樹,樹中每個(gè)節(jié)點(diǎn)和數(shù)組中存放該節(jié)點(diǎn)值的那個(gè)元 素對(duì)應(yīng)。如果表示堆的數(shù)組為A,那么樹的根為A1。 表示堆的數(shù)組A是一個(gè)具有兩個(gè)屬性的對(duì)象:length(A)是 數(shù)組中的元素個(gè)數(shù),heap-size(A)是存放在A中的堆的元素 個(gè)數(shù);Aheap-size(A)之后的元素都不屬于相應(yīng)的堆。也 就是:Heap-size(A) Ai 4 then largest l 5 else largest i 6 If r heap-sizeA and Ar Alargest 7 then largest r 8 If largest i 9
2、 then exchange AiAlargest 10 MAX-HEAPIFY(A, largest) 8 6.1 MAX-HEAPIFY過程 9 6.1 MAX-HEAPIFY過程 10 6.1 MAX-HEAPIFY過程 6.2 MAX-HEAPIFY時(shí)間 當(dāng)MAX-HEAPIFY作用在一棵以節(jié)點(diǎn)i為根的, 大小為n的子樹上時(shí),其運(yùn)行時(shí)間為調(diào)整元素 Ai,ALEFT(i)和ARIGHT(i)的關(guān)系時(shí)所用時(shí) 間(1),再加上對(duì)以i的某個(gè)子結(jié)點(diǎn)為根的子樹 遞歸調(diào)用MAX-HEAPIFY所需的時(shí)間。i結(jié)點(diǎn)的 子樹大小至多為2n/3,那么MAX-HEAPFY的運(yùn) 行時(shí)間為: T(n) T(2n/
3、3) + (1) 根據(jù)主定理,該遞歸式的解為T(n) (lgn) 6.3 建堆 我們可以自底向上的用MAX-HEAPIFY來將一個(gè) 數(shù)組A1.n變成一個(gè)最大堆。過程BUILD-MAX- HEAP對(duì)樹中的每一個(gè)其他節(jié)點(diǎn)都調(diào)用一次 MAX-HEAPIFY。 BUILD-MAX-HEAP(A) 1 heap-sizeA lengthA do MAX-HEAPIFY(A,i) 2 for i length A / 2 downto 1 13 建堆過程 14 建堆過程 15 建堆過程 16 建堆過程 17 建堆過程 18 建堆過程 BUILD-MAX-HEAP正確性 為了證明BUILD-MAX-HEAP
4、的正確性,我們使 用如下的循環(huán)不變式: 在第23行中for循環(huán)的每一次迭代開始時(shí),節(jié) 點(diǎn)i+1,i+2, n都是一個(gè)最大堆的根。 我們需要證明在第一次循環(huán)迭代之前,這個(gè)不 變式已為真。每次循環(huán)迭代都能保持此不變 式,并且在循環(huán)結(jié)束時(shí)這個(gè)不變式會(huì)提供一個(gè) 很有用的屬性來顯示程序的正確性。 BUILD-MAX-HEAP正確性 也是平凡最大堆的根。 保持:要證明每次迭代都保持了循環(huán)不變式, 注意到結(jié)點(diǎn)i的子結(jié)點(diǎn)的編號(hào)均比i大,于是,根 據(jù)循環(huán)不變式,這些子結(jié)點(diǎn)都是最大堆的根。 這也是調(diào)用函數(shù)MAX-HEAPIFY(A,i),以使結(jié)點(diǎn) i成為最大堆的根的前提條件。此外,MAX- HEAPFY的調(diào)用保持
5、了結(jié)點(diǎn)i+1,i+2,n為最大 堆的性質(zhì)。 在for循環(huán)中遞減i,即為下一次迭代重新建立了 循環(huán)不等式。 初始化:在第一輪循環(huán)迭代之前,i n / 2 。 結(jié)點(diǎn) n / 2 1,n / 2 2 ,n都是葉結(jié)點(diǎn), BUILD-MAX-HEAP正確性 終止:過程終止時(shí),i=0.根據(jù)循環(huán)不等式,我們 知道結(jié)點(diǎn)1,2,n中,每個(gè)都是最大堆的 根,特別的,結(jié)點(diǎn)1就是一個(gè)最大堆的根。 我們可以這樣來計(jì)算BUILD-MAX-HEAP運(yùn)行時(shí) 間的一個(gè)簡(jiǎn)單上界:每次調(diào)用MAX-HEAPFY的 時(shí)間為O(lgn),共有O(n)次調(diào)用,故運(yùn)行時(shí)間為 O(nlgn)。這個(gè)界盡管是對(duì)的,但是從漸近意義 上講不夠緊確。
6、h 2 O n O ( h ) O n 2 O n hh O ( n ) 2 BUILD-MAX-HEAP精確上界 MAX-HEAPIFY作用在高度為h的結(jié)點(diǎn)上的時(shí)間 為O(h),我們可以將BUILD-MAX-HEAP的代價(jià) 表達(dá)為上確界 將x=1/2代入幾何級(jí)數(shù)的微分來計(jì)算(A.8),則 于是,BUILD-MAX-HEAP的運(yùn)行時(shí)間的界為: h lg n h 0 lg n h 0 2 n h 1 2 2 1 / 2 (1 1 / 2 ) h 0 h h h h h 0 2 lg n h 0 6.4 堆排序算法 開始時(shí),堆排序算法先后用BUILD-MAX-HEAP 將輸入數(shù)組A1.n構(gòu)造成一個(gè)
7、最大堆,因?yàn)閿?shù) 組中最大元素在A1,可以通過把它與An互換 來達(dá)到最終正確的位置。 接下來,如果從堆中去掉結(jié)點(diǎn)n,可以很容易地 將A1.n-1建成最大堆。原來根的子女仍是最大 堆,而新的根元素可能違背了最大堆性質(zhì)。這 時(shí)調(diào)用MAX-HEAPIFY(A,1)就可以保持這一性 質(zhì),在A1.(n-1)中構(gòu)建出最大堆。 6.4 堆排序算法 HEAPSORT(A) 1 BUILD-MAX-HEAP(A) 2 for i lengthA downto 2 3 do exchange A1Ai 4 heap-sizeAheap-sizeA-1 5 MAX-HEAPIFY(A,1) HEAPSORT過程的時(shí)間
8、代價(jià)為O(nlgn),其中 調(diào)用BUILD-MAX-HEAP的時(shí)間為O(n),n次 MAX-HEAPIFY調(diào)用中每一次的時(shí)間代價(jià)為 O(lgn)。 6.4 優(yōu)先級(jí)隊(duì)列 堆排序的應(yīng)用:(最大/最小)優(yōu)先級(jí)隊(duì)列 作業(yè)調(diào)度:找出優(yōu)先級(jí)最高的、插入作業(yè)、調(diào)整優(yōu)先級(jí) 優(yōu)先級(jí)隊(duì)列是一種用來維護(hù)由一組元素構(gòu)成的集合 S的數(shù)據(jù)結(jié)構(gòu),這一組元素中的每一個(gè)都有一個(gè)關(guān) 鍵字key。一個(gè)最大優(yōu)先級(jí)隊(duì)列支持以下操作: INSERT(S,x):把元素x插入集合S MAXIMUM(S):返回S中具有最大關(guān)鍵字的元素 EXTRACT-MAX(S):去掉并返回S中的具有最大關(guān)鍵字的 元素 INCREASE-KEY(S,x,k)
9、:將元素x的關(guān)鍵字的值增 加到k,這里k值不能小于x的原關(guān)鍵字的值。 優(yōu)先級(jí)隊(duì)列的操作 程序HEAP-MAXIMUM用(1)時(shí)間實(shí)現(xiàn)了MAXIMUM HEAP-MAXIMUM(A) return A1 程序HEAP-EXTRACT-MAX實(shí)現(xiàn)了EXTRACT-MAX HEAP-EXTRACT-MAX(A) if heap-sizeA1 then error ”heap underflow” maxA1 A1Aheap-sizeA heap-sizeAheap-sizeA 1 MAX-HEAPIFY(A,1) return max 27 優(yōu)先級(jí)隊(duì)列的操作 程序HEAP-INCREASE-KEY實(shí)現(xiàn)了INCREASE-KEY操作。在優(yōu)先 級(jí)隊(duì)列中關(guān)鍵字值需要增加的元素由對(duì)應(yīng)數(shù)組的下標(biāo)i來標(biāo)識(shí)。該過 程首先將元素Ai的關(guān)鍵字值更新為新的值。由于增大Ai的關(guān)鍵字 可能會(huì)違反最大堆性質(zhì),因此在從本結(jié)點(diǎn)往根移動(dòng)的路徑上,為新 增大的關(guān)鍵字尋找合適的位置。在移動(dòng)的過程中,此元素不斷地和 其父母相比,如果此元素的關(guān)鍵字較大,則交換他們的關(guān)鍵字且繼 續(xù)移動(dòng)。當(dāng)元素的關(guān)鍵字小于其父母時(shí),最大堆性質(zhì)成立,程序終 止 HEAP-INCREASE-KEY(A,i,key) 1 if key 1 and APARENT(i)Ai 5 do exchange AiAPARENT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教師聘任合同
- 新版賣房協(xié)議合同3篇
- 旅游合同協(xié)議書范本3篇
- 搖一搖服務(wù)合同的服務(wù)成果交付3篇
- 市政府清晰指南采購(gòu)合同模板3篇
- 安徽文化行業(yè)勞動(dòng)合同樣本3篇
- 房屋買賣定金合同判決書中的實(shí)踐意義3篇
- 攪拌機(jī)購(gòu)銷合同樣式3篇
- 方木模板購(gòu)銷合同范本3篇
- 搞笑離婚協(xié)議書例子3篇
- 2025蛇年春節(jié)春聯(lián)對(duì)聯(lián)帶橫批(276副)
- 中國(guó)PHM系統(tǒng)行業(yè)投資方向及市場(chǎng)空間預(yù)測(cè)報(bào)告(智研咨詢發(fā)布)
- 2024質(zhì)量管理復(fù)習(xí)題
- 2025年中學(xué)德育工作計(jì)劃
- 《數(shù)字通信原理》習(xí)題答案(全)
- 安防監(jiān)控智能化售后服務(wù)方案
- 2024年信息系統(tǒng)項(xiàng)目管理師(綜合知識(shí)、案例分析、論文)合卷軟件資格考試(高級(jí))試題與參考答案
- 馬克思主義中國(guó)化進(jìn)程與青年學(xué)生使命擔(dān)當(dāng)Ⅱ?qū)W習(xí)通超星期末考試答案章節(jié)答案2024年
- 《產(chǎn)后出血預(yù)防與處理指南(2023)》解讀課件
- 2024-2025學(xué)年第一學(xué)期高一級(jí)生物學(xué)科期中檢測(cè)
- 2024-2025學(xué)年八年級(jí)化學(xué)滬科版(五四學(xué)制)全一冊(cè)上學(xué)期期末復(fù)習(xí)卷①
評(píng)論
0/150
提交評(píng)論