《算法导论》6.3-3

《算法导论》6.3-3
第一次写博客,不完美之处,多多包涵

证明:在任一含n个元素的堆中,至多有 ⌈ n / 2 h + 1 ⌉ \lceil n/2^{h+1}\rceil n/2h+1个高度为h的结点。
1.先看简单情况: n = 2 k − 1 n=2^k-1 n=2k1
则高度为h的节点数易知为
2 k − h − 1 2^{k-h-1} 2kh1
⌈ n / 2 h + 1 ⌉ \lceil n/2^{h+1}\rceil n/2h+1= ⌈ 2 k − 1 / 2 h + 1 ⌉ \lceil {2^k-1}/2^{h+1}\rceil 2k1/2h+1= 2 k − h − 1 2^{k-h-1} 2kh1
则两者相等
2.假设此时该堆叶节点并非都处于同一行
令n = 2 k 2^k 2k+m-1 (m< 2 k 2^k 2k)
则高度为h的节点数为
⌈ m / 2 h ⌉ \lceil m/2^h\rceil m/2h+ 2 k − 1 − h − 2 ∗ ⌈ m / 4 ⌉ 2 h 2^{k-1-h}-\frac{2*\lceil m/4 \rceil}{2^h} 2k1h2h2m/4
⌈ n / 2 h + 1 ⌉ \lceil n/2^{h+1}\rceil n/2h+1= ⌈ 2 k − 1 + m / 2 h + 1 ⌉ \lceil {2^k-1+m}/2^{h+1}\rceil 2k1+m/2h+1= 2 k − 1 − h 2^{k-1-h} 2k1h+ ⌈ m − 1 2 h + 1 ⌉ \lceil \frac {m-1}{2^{h+1}} \rceil 2h+1m1
再令m = k ∗ 2 h + c k * 2^h +c k2h+c
若c=0
⌈ m / 2 h ⌉ \lceil m/2^h\rceil m/2h= k k k
2 ∗ ⌈ m / 4 ⌉ / 2 h 2*\lceil m/4 \rceil/2^h 2m/4/2h= k / 2 k/2 k/2
⌈ m − 1 2 h + 1 ⌉ \lceil \frac {m-1}{2^{h+1}} \rceil 2h+1m1 = ⌈ k / 2 ⌉ \lceil k/2 \rceil k/2
易知不等式成立
若c=1
⌈ m / 2 h ⌉ \lceil m/2^h\rceil m/2h= k + 1 k+1 k+1
2 ∗ ⌈ m / 4 ⌉ / 2 h 2*\lceil m/4 \rceil/2^h 2m/4/2h= ⌈ k ∗ 2 h + 1 4 ⌉ / 2 h − 1 \lceil \frac{k*2^h+1}4\rceil/2^{h-1} 4k2h+1/2h1
⌈ m − 1 2 h + 1 ⌉ \lceil \frac {m-1}{2^{h+1}} \rceil 2h+1m1 = ⌈ k / 2 ⌉ \lceil k/2 \rceil k/2 = ⌈ k / 2 ⌉ \lceil k/2 \rceil k/2
易知不等式成立

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值