关闭

算法导论 6.3-3解答

标签: 算法
3718人阅读 评论(7) 收藏 举报
分类:
证明:在任一含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)).
命题得证。


   
4
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:67229次
    • 积分:941
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:10篇
    • 译文:0篇
    • 评论:89条
    最新评论