動(dòng)畫(huà) | 什么是二叉堆捂龄?

二叉堆的解釋

(動(dòng)態(tài)選擇優(yōu)先級(jí)最高的任務(wù)執(zhí)行)

file

堆止后,又稱(chēng)為優(yōu)先隊(duì)列奈辰。雖然名為優(yōu)先隊(duì)列忙上,但堆并不是隊(duì)列藕漱。堆和隊(duì)列是兩種不同的數(shù)據(jù)結(jié)構(gòu)景醇,堆是樹(shù)態(tài)的臀稚,隊(duì)列是線性的。在隊(duì)列中三痰,我們可以向隊(duì)列添加元素吧寺,取出的時(shí)候是按照進(jìn)入隊(duì)列的先后順序取出元素的,先進(jìn)先出散劫;而在堆中稚机,卻不是按照元素添加的先后順序,而是按照元素的優(yōu)先級(jí)取出元素获搏。

所以二叉堆是為了找出最大或最小而生的赖条,“大”和“小”并不是傳統(tǒng)意義上的小大,而是優(yōu)先級(jí)的高低常熙。二叉堆分為最大堆和最小堆纬乍,最大堆的頂點(diǎn)可以看作是優(yōu)先級(jí)最高的也可以看作是優(yōu)先級(jí)最低的,最小堆也是如此裸卫。

二叉堆是一種完全二叉樹(shù)仿贬,因?yàn)橥耆鏄?shù)的特性普遍使用數(shù)組結(jié)構(gòu)是非常好用的,所以性注定了二叉堆的存儲(chǔ)形式只能是數(shù)組或者動(dòng)態(tài)數(shù)組(長(zhǎng)度可變)墓贿。

二叉堆最主要的操作是兩個(gè)茧泪,siftUp上浮和siftDown下沉,來(lái)保證二叉堆的性質(zhì):

1.父節(jié)點(diǎn)的鍵值總是優(yōu)先于任何一個(gè)子節(jié)點(diǎn)的鍵值聋袋;

2.左右子樹(shù)都是以一個(gè)二叉堆队伟。

展示最大堆
file

用數(shù)組存儲(chǔ)二叉堆,堆的頂點(diǎn)下標(biāo)可以從0開(kāi)始也可以從1開(kāi)始舱馅$峙荩看上面圖中,以self為參照物代嗤,self下標(biāo)的變量為i:

parent(i) = (i - 1) / 2;
leftChild(i) = 2 * i + 1棘钞;
rightChild(i) = leftChild(i) + 1 = 2 * i + 2;

如果是堆頂下標(biāo)從1開(kāi)始:

parent(i) = i / 2;
leftChild = 2 * i;
rightChild = 2 * i + 1;

向堆中添加元素siftUp

二叉堆的節(jié)點(diǎn)添加,是在數(shù)組的最末尾插入新節(jié)點(diǎn)的干毅,然后進(jìn)行自下而上調(diào)整子節(jié)點(diǎn)和父節(jié)點(diǎn)宜猜,不滿足二叉堆性質(zhì)則交換,直到當(dāng)前子樹(shù)滿足二叉堆的性質(zhì)硝逢。如果可以為了減少交換次數(shù)的話姨拥,可以單向復(fù)制绅喉,使得添加的節(jié)點(diǎn)插入到合適的位置。

動(dòng)畫(huà)siftUp

算法動(dòng)畫(huà)視頻 地址

Code:?jiǎn)蜗驈?fù)制
file
Code:交換法
file

取出堆中最大的元素siftDown

取出堆中最大的元素其實(shí)是取出根節(jié)點(diǎn)叫乌,這個(gè)下沉的操作很有意思了柴罐。它有兩方面的下沉:一方面是將根節(jié)點(diǎn)下沉到數(shù)組末尾,然后數(shù)組長(zhǎng)度假象性減一下憨奸;另一方面是將交換后的根節(jié)點(diǎn)和左右子樹(shù)的根節(jié)點(diǎn)作比較革屠,不滿足堆性質(zhì)的則交換。

動(dòng)畫(huà)siftDown

算法動(dòng)畫(huà)視頻 地址

Code:siftDown單向復(fù)制
file
Code:siftDown交換法
file

構(gòu)建二叉堆

構(gòu)建二叉堆其實(shí)是一個(gè)一個(gè)子樹(shù)的下沉操作排宰,將無(wú)序的完全二叉樹(shù)調(diào)整為二叉堆似芝。所以它必須從滿足高度為2的子樹(shù)根節(jié)點(diǎn)開(kāi)始,即非葉子節(jié)點(diǎn)板甘,然后自底向上對(duì)每一個(gè)子樹(shù)執(zhí)行siftDown操作党瓮,直到完成二叉堆化。

動(dòng)畫(huà):構(gòu)建二叉堆

算法動(dòng)畫(huà)視頻 地址

Code
file

喜歡本文的朋友盐类,微信搜索「算法無(wú)遺策」公眾號(hào)寞奸,收看更多精彩的算法動(dòng)畫(huà)文章

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市傲醉,隨后出現(xiàn)的幾起案子蝇闭,更是在濱河造成了極大的恐慌,老刑警劉巖硬毕,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呻引,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡吐咳,警方通過(guò)查閱死者的電腦和手機(jī)逻悠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)韭脊,“玉大人童谒,你說(shuō)我怎么就攤上這事』Ω幔” “怎么了饥伊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蔫饰。 經(jīng)常有香客問(wèn)我琅豆,道長(zhǎng),這世上最難降的妖魔是什么篓吁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任茫因,我火速辦了婚禮,結(jié)果婚禮上杖剪,老公的妹妹穿的比我還像新娘冻押。我一直安慰自己驰贷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布洛巢。 她就那樣靜靜地躺著括袒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稿茉。 梳的紋絲不亂的頭發(fā)上箱熬,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音狈邑,去河邊找鬼。 笑死蚤认,一個(gè)胖子當(dāng)著我的面吹牛米苹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播砰琢,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蘸嘶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了陪汽?” 一聲冷哼從身側(cè)響起训唱,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挚冤,沒(méi)想到半個(gè)月后况增,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡训挡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年澳骤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澜薄。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡为肮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肤京,到底是詐尸還是另有隱情颊艳,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布忘分,位于F島的核電站棋枕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏饭庞。R本人自食惡果不足惜戒悠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舟山。 院中可真熱鬧绸狐,春花似錦卤恳、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至符相,卻和暖如春拆融,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背啊终。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工镜豹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蓝牲。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓趟脂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親例衍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子昔期,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容