堆排序
Posted 之墨_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序相关的知识,希望对你有一定的参考价值。
算法导论习题—第六章堆排序(一)
6.1-1 在高度为h的堆中,元素个数最多和最少分别是多少?
答:最多为 2 ( h + 1 ) − 1 2^(h+1)-1 2(h+1)−1个元素,最少为 2 h 2^h 2h个元素。因为一棵高度为 h − 1 h-1 h−1的完全二叉树,有求和 M ( 0 − h 1 ) 2 i = 2 h − 1 M(0-h1)2^i = 2^h-1 M(0−h1)2i=2h−1个元素。那么高度为h的堆中,有至多为高度为h的完全二叉树的元素个数,即: 2 ( h + 1 ) − 1 2^(h+1)-1 2(h+1)−1;至少的情况为 h − 1 h-1 h−1高度的完全二叉树再加上一个子元素即 2 h 2^h 2h个元素。
6.1-2 证明:含n个元素的堆的高度为向下取整( lg n \\lg n lgn)
答:假设 n = 2 m − 1 + k ( m n=2^m-1+k(m n=2m−1+k(m足够大),也就是说这个堆是由一棵高度为m-1的完全二叉树和 k k k个叶节点组成。这颗树的高度定义为从根元素出发到叶节点最长简单路径上边的数目。肯定是大于等于 m m m的。所以含有 n n n个元素的堆的高度为向下取整 ( l g n ) (lgn) (lgn)。
6.1-3 证明:在最大堆的任一子树中,该子树所包含的最大元素在该子树的根节点上。
答:反证法:如果最大元素不在该子树的根节点上,那么这个最大元素的父亲节点一定小于这个最大元素,违背了最大堆的属性和定义。
6.1-4 假设一个最大堆的所有元素都不相同,那么该堆的最小元素应该位于哪里?
答:叶节点。
6.1-5 一个已排好序的数组是一个最小堆吗?
答:是的,数组索引从左往右依次变大,意味着该堆的子元素都比父元素大,是最小堆。
6.1-6 值为<23,17,14,6,13,10,1,5,7,12>的数组是一个最大堆吗?
答:不是,位于第九位的7比位于第四位的6来的大。所以不是一个最大堆。
6.1-7 证明:当用数组表示存储 n n n个元素的堆时,叶节点下标分别为 [ n / 2 ] + 1 , [ n / 2 ] + 2 , . . . n [n/2]+1,[n/2]+2,...n [n/2]+1,[n/2]+2,...n
答:先顺着推:对于这些索引为 [ n / 2 ] + 1 , [ n / 2 ] + 2 , . . . n [n/2]+1,[n/2]+2,...n [n/2]+1,[n/2]+2,...n的数组元素他们的子节点必然是 > = 2 ∗ [ n / 2 ] + 2 >=2*[n/2]+2 >=2∗[n/2]+2大于了数组的长度n越界了,所以他们没有子元素。再逆着推:对于没有子元素的数组元素,意味者2i,2i+1是大于数组的长度n的,所以对于没有子元素的叶节点来说他们的索引范围为 [ n / 2 ] + 1 , [ n / 2 ] + 2 , . . . n [n/2]+1,[n/2]+2,...n [n/2]+1,[n/2]+2,...n
以上是关于堆排序的主要内容,如果未能解决你的问题,请参考以下文章