国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

堆與優(yōu)先級隊列——學習筆記

2019-11-14 09:25:16
字體:
供稿:網(wǎng)友

本篇文章主要基于算法algorithm第四版


背景:處理有序元素時,不一定要求所有數(shù)據(jù)有序,只要求處理當前最大(優(yōu)先級最高)的元素 優(yōu)先級隊列:支持 刪除最大元素插入元素 兩種操作的一種數(shù)據(jù)結(jié)構(gòu)


【1】優(yōu)先級隊列的基本表現(xiàn)形式

優(yōu)先級隊列的基本實現(xiàn)可以使用 有序無序數(shù)組鏈表

無序數(shù)組或鏈表:刪除最大元素時需要將數(shù)組遍歷一遍造出最大元素,插入則無需額外操作有序數(shù)組或鏈表:刪除元素時只需直接刪除第一個,插入元素需要保持數(shù)據(jù)的有序(類似于插入排序) 特點:這類實現(xiàn)的插入元素或刪除最大元素在最壞情況下需要線性時間來完成

【2】基于二叉堆的優(yōu)先隊列實現(xiàn)方法

基于數(shù)組或鏈表的操作最壞情況下需線性時間完成,而用堆來實現(xiàn)優(yōu)先級隊列可以使兩種操作更快執(zhí)行

(1)基本定義

堆有序:一棵二叉樹的每個節(jié)點大于等于它的兩個子節(jié)點二叉堆:一組能夠用 堆有序完全二叉樹 排序的元素

因為二叉堆是完全二叉樹,所以只用數(shù)組就可以表示,在二叉堆中位置為k的父結(jié)點的位置為ceil(k/2),而子結(jié)點為2k和2k+1,這樣方便的表示也使其能通過數(shù)組索引方便地上下移動元素

(2)二叉堆的相關(guān)算法

在插入或刪除堆中元素時,會打破堆的狀態(tài),所有需要對堆進行遍歷來恢復堆的狀態(tài)(堆有序 以及 完全二叉樹),這個過程稱為堆的有序化。有序化過程主要分為兩類:

某個結(jié)點的優(yōu)先級上升(或是在堆底加入新元素時),需要由下至上恢復堆的順序,且形象地稱之為上浮某結(jié)點優(yōu)先級下降(如將根節(jié)點替換為更小的元素時),需要由上至下恢復堆的順序,稱之為下沉

(3)優(yōu)先級隊列的實現(xiàn)

通過有序化的兩個過程我們便可實現(xiàn)插入元素以及刪除最大元素的操作 插入元素:將新元素加到數(shù)組末尾,增加堆的大小并讓這個新元素 上浮 到合適的位置 刪除最大元素:從數(shù)組刪去最大的元素并將最后一個元素放到堆頂,減小堆的大小,并讓該元素 下沉 到合適的位置 這里寫圖片描述

【3】堆排序

優(yōu)先隊列可以變成一種排序方法,將所有元素插入一個查找最小元素 的優(yōu)先隊列,然后再重復調(diào)用刪除最小元素的操作來將他們按順序刪去。以此方法來實現(xiàn)排序。 在進行堆排序時,首先要將一組無序數(shù)據(jù)建立起堆,然后再重復刪去最大(或?。┰?/p>

(1)堆的構(gòu)造

上浮法:逐一將元素加入到已建立的堆尾中,再用上浮法調(diào)整堆下沉法:從葉子結(jié)點視為已經(jīng)調(diào)整好的堆,然后用下沉法將其父結(jié)點下沉至合適位置,以此逐層往上,此法只需要掃描數(shù)組中一半的元素,因為我們可以跳過大小為1的子堆

(2)下沉排序

這一階段完成排序工作。從堆中刪除最大元素,然后放入堆縮小后數(shù)組中空出的位置,將堆尾元素放到堆頂,進行下沉操作。以此方法重復,則一個最大堆可以得到一個升序序列。


本人學識尚淺,有什么不對的歡迎指出,一起交流交流^ ^


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 永胜县| 郧西县| 乡宁县| 山丹县| 上虞市| 平遥县| 东至县| 宝坻区| 洪泽县| 永宁县| 崇阳县| 晋中市| 嘉祥县| 邹平县| 兰溪市| 徐水县| 杨浦区| 正镶白旗| 汉寿县| 吉安县| 土默特左旗| 西和县| 凌云县| 建德市| 万盛区| 公主岭市| 屏东县| 桓台县| 丹寨县| 前郭尔| 建湖县| 灯塔市| 仙居县| 龙岩市| 静安区| 佛学| 毕节市| 龙陵县| 昆山市| 琼海市| 利川市|