這里說的堆(heap)是一種 nearly complete binary tree:除了最低的一層外,其它層填充滿了結(jié)點(diǎn),并且最底層的結(jié)點(diǎn)是從左到右填充的。
這里假定root結(jié)點(diǎn)的索引從1 開始。
它有如下的性質(zhì):
1. 對(duì)于一個(gè)包含 n個(gè)元素的heap, 它的高度為 floor(lg n)
證明: 用 h表示這個(gè)heap的高度。則有:
2^h 《= n 《= 2^(h+1) -1 《 2^(h+1)
對(duì)上面取對(duì)數(shù):
h 《 = lgn 《 h + 1
考慮到 h為整數(shù), h只能是 floor(lg n)。
2. 對(duì)于以數(shù)組形式存儲(chǔ)的 n個(gè)元素的heap, 葉子結(jié)點(diǎn)的索引為 floor(n/2)+1, floor(n/2)+2, 。。., n
證明: 假定葉子結(jié)點(diǎn)索引為 floor(n/2), 那么, 2 * floor(n/2) 《 n, 表示這個(gè)葉子節(jié)點(diǎn)存在子結(jié)點(diǎn)。。,也就是它不是葉子結(jié)點(diǎn)。
2 * (floor(n/2)+1) =2 * floor(n/2) + 2 》 n, 不存在子節(jié)點(diǎn),所以,索引為 floor(n/2)+1的結(jié)點(diǎn)是葉子結(jié)點(diǎn)。
3. n個(gè)元素的heap, 它的葉子結(jié)點(diǎn)的個(gè)數(shù)為 ceiling[n/2]
證明: 根據(jù) 2可以得出這個(gè)結(jié)論。
4. 對(duì)于 n個(gè)元素的heap, 最多有ceiling(n/2^(h+1))個(gè)高度為h的結(jié)點(diǎn)
證明 i: 用歸納法。
當(dāng) h = 0時(shí)的結(jié)點(diǎn)為葉子結(jié)點(diǎn),根據(jù)3, 個(gè)數(shù)為 ceiling(n/2) = ceiling(n/2^(h+1)(當(dāng) h = 0)。
所以, h =0時(shí)成立。
假定 h-1時(shí)成立,那么此時(shí)高度 h-1的結(jié)點(diǎn)個(gè)數(shù)為 ceiling(n/2^(h-1))。
那么, 考慮去掉所有葉子結(jié)點(diǎn)的heap T‘。它的節(jié)點(diǎn)數(shù)為 n - ceiling[n/2] = floor(n/2)。
在原來堆中高度為 h的結(jié)點(diǎn)在 T’中對(duì)應(yīng)的高度為 h-1.
那么在原來堆中高度h的結(jié)點(diǎn)的個(gè)數(shù)等于 T‘中高度為 h-1的個(gè)數(shù):
ceiling( floor(n/2)/2^(h-1)) 《= ceiling((n/2)/2^(h-1)) = ceiling(n/2^h)。
證明 ii:
假定結(jié)點(diǎn) i高度為 h,那么, i, i*2, i*4, 。。., i*2^h 為 i的最長(zhǎng)路徑,并且 i*2^(h+1) 》 n.
于是有,
i*2^h 《= n 《 i * 2^(h+1)
i 》 n/2^(h+1), i 《 2 * (n/2^(h+1))
所以, i的取值為, ceiling(n/2^(h+1)), ceiling(n/2^(h+1)) + 1, 。。., ceiling(n/2^(h+1)) + ceiling(n/2^(h+1)) - 1
共有 ceiling(n/2^(h+1)) 個(gè)。
-
節(jié)點(diǎn)
+關(guān)注
關(guān)注
0文章
222瀏覽量
24963 -
堆棧
+關(guān)注
關(guān)注
0文章
183瀏覽量
20125 -
root
+關(guān)注
關(guān)注
1文章
86瀏覽量
21719
發(fā)布評(píng)論請(qǐng)先 登錄
一文了解電壓諧波

橋堆:整流電路的“中流砥柱”
一文看懂激光的性質(zhì)

一文了解Highcharts

一文了解Android UDP通信
變頻器負(fù)載性質(zhì)了解嗎?如何維護(hù)變頻器?
紅外熱電堆傳感器在什么領(lǐng)域用得多
傅里葉變換的基本性質(zhì)和定理
一文了解激光測(cè)距傳感器
平衡電橋的性質(zhì)與特點(diǎn)是什么
如何使用SystemView的堆監(jiān)控功能

一文了解MySQL索引機(jī)制

評(píng)論