算法导论 6.3-3解答

来源:互联网 发布:数据库的三种数据模型 编辑:程序博客网 时间:2024/06/06 05:37
证明:在任一含n个元素的堆中,至多有ceiling(n/(2^(h+1)))个高度为h的节点。
分析:刚开始分析这道题,犯了结点高度h的错误。
具体问题如下:
对于满二叉树,上述命题成立如果是非完全二叉树,命题不成立。举例说明:假设有10个元素,那么高度为1的节点也就是第3层的节点,一共有4个,而不是ceiling(10/2^2))=3个,为什么呢?
经过思考以后,对于结点高度的定义,是按照当前所在结点为根结点的子树决定的,而不是由整棵树决定,也就是所有的叶子结点,它的高度全部为0。还是假设有10个元素,它的高度如下图所示:
 
命题理解正确了,开始用数学归纳法证明吧!
证明:
(1)对于h=0, 即叶子结点的个数,由6.1-7习题可知,叶子结点的个数最多为ceiling(n/2)=ceiling(n/2^(h+1)),即初始化成立。
(2)假设h=x成立,即高度为x的结点最多有ceiling(n/2^(x+1)),
那么对于高度为h=x+1的结点应该为高度为x的父结点,所以高度为x+1的结点个数最多为ceiling(n/2^(x+1))/2=ceiling(n/2^(x+2))=ceiling(n/2^(h+1)).
命题得证。
 
 
转载自:http://blog.csdn.net/lqh604/article/details/7381893
 
 
解法2:(不知是否正确)
该完全二叉树高log2(n+1)则高为h的节点的层号为log2(n+1) - h由于二叉树第i层最多有2^(i - 1)个节点所以该层最多的节点数为2^(log2(n+1) - (h + 1))个,即:ceiling (n / 2 ^ (h + 1))
转自:http://bbs.sjtu.edu.cn/bbstcon?board=Algorithm&reid=1218003164
原创粉丝点击