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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

數(shù)據(jù)結(jié)構(gòu)-堆

2019-11-08 03:07:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

原文鏈接  點(diǎn)擊打開(kāi)鏈接

什么是堆

堆是一種特殊的二叉完全樹(shù)。堆的一個(gè)主要特點(diǎn)是它以一定的偏序(a partial order)來(lái)保存所有節(jié)點(diǎn)[譯者注:此處的偏序是指不完全的排序,堆只需要滿(mǎn)足父節(jié)點(diǎn)大于兩個(gè)子節(jié)點(diǎn),而子節(jié)點(diǎn)之間沒(méi)有要求]。作為一顆完全樹(shù),一層中的節(jié)點(diǎn)是從左到右填滿(mǎn)的。如果一個(gè)節(jié)點(diǎn)沒(méi)有左兒子,那么它一定沒(méi)有右兒子。并且在第h層中如果存在節(jié)點(diǎn),那么第h-1層必須是填滿(mǎn)的。

 

以下是堆的正式定義(摘自Computer Algorithms by S. Baase and A. Van Gelder):

 

一個(gè)二叉樹(shù)V是一個(gè)堆,當(dāng)且僅當(dāng)它滿(mǎn)足以下條件:

V從根節(jié)點(diǎn)至h-1層是完全樹(shù)所有的葉子節(jié)點(diǎn)只存在于h與h-1層上所有到達(dá)h層葉子節(jié)點(diǎn)的路勁都在到達(dá)h-1層葉子節(jié)點(diǎn)路徑的左側(cè)

堆有兩種:最大堆和最小堆。最小堆中每個(gè)節(jié)點(diǎn)的優(yōu)先級(jí)小于或者等于它的子節(jié)點(diǎn);最大堆則相反,每個(gè)節(jié)點(diǎn)的優(yōu)先級(jí)都大于或者等于它的子節(jié)點(diǎn)。

 

圖示最大堆(左)和最小堆(右):

 

 

實(shí)現(xiàn)細(xì)節(jié)

CHeapTree類(lèi)通過(guò)一個(gè)數(shù)組,從上至下、從左至右地保存樹(shù)中的節(jié)點(diǎn)來(lái)實(shí)現(xiàn)堆。因此,上述圖示中的最大堆就可以表示為10,9,8,6,1,5。在這種表示方式中,第j個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)和父節(jié)點(diǎn)的表達(dá)如下(假設(shè)起始索引值是0):

左子節(jié)點(diǎn) = j*2-1右子節(jié)點(diǎn) = j*2 = 左子節(jié)點(diǎn)+1父節(jié)點(diǎn)     = (j-1)/ 2

如果索引值越界,則該節(jié)點(diǎn)不存在。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汝阳县| 东兰县| 香格里拉县| 南宫市| 呼和浩特市| 湖口县| 乐都县| 镇赉县| 电白县| 永和县| 山东| 太白县| 金湖县| 拜城县| 隆安县| 辽阳市| 乡城县| 岑巩县| 丹棱县| 丹阳市| 会理县| 五家渠市| 吉林省| 茌平县| 六盘水市| 子洲县| 汽车| 荥经县| 郑州市| 阿合奇县| 隆林| 莱州市| 新巴尔虎右旗| 昌江| 西安市| 东乌珠穆沁旗| 房山区| 慈溪市| 铅山县| 榆社县| 阿鲁科尔沁旗|