堆排序 练习题

您所在的位置:网站首页 快速排序数据结构例题 堆排序 练习题

堆排序 练习题

2024-07-11 19:26| 来源: 网络整理| 查看: 265

(注:大部分题由于找不到答案,所以作者不得不自己试着做。。)

 

6.1 堆

    1、在高度为h的堆中,元素个数最多、最少分别为?

解:由堆序性质,堆是一个底层完全充满的树,因此除第h层外,每层的结点个数为2^(k-1),k为当前层数。

        那么元素总个数为:N = 1 + 2 + 2^2 + 2^3 + …… + 2^(h-2) + n,其中n为第n层的元素个数,满足:1 ≤ n ≤ 2^(h-1),则可得:

         2^(h - 1) ≤ N ≤ 2^h - 1。

 

    2、证明:含 n 个元素的堆的高度为⌊lg n⌋。

证明:由6.1知: 2^(h - 1) -1 ≤ N ≤ 2^h - 1,因此可得:2^(h-1) < N < 2^h,则同取2的对数,得到:h - 1< lg n < h,则⌊lg n⌋ = h - 1,为高度减一。即h = ⌊lg n⌋ + 1,至于为什么和证明的结论产生误差,是由于书上堆的高度并没有包括最后一层。

   

    3、证明:在最大堆的任一子树中,该子树所包含的最大元素在子树的根节点上。

证明:由于最大堆性质:A[ Parent ( i ) ] ≥ A[ i ],得到因此对该子树任意非根结点 i,均有该结论,则递归可得,最大元素在子树的根节点上。

    4、假设一个最大堆的所有元素不同,那么该堆的最小元素位于哪里?

解:同样,根据最大堆的性质A[ Parent ( i ) ] ≥ A[ i ], 因此对于任意子树的根结点,均有:A[Left ( i ) ] ≤ A[i],同时,A[ Right ( i )] ≤ A[ i ],因此对任意子树递归,可得最小元素在叶节点上,同时由于所有叶节点都在堆的同一层——堆的最后一层,因此最小元素位于堆的最后一层。

    5、一个已排好序的数组是一个最小堆吗?

解:并不是,因为最小堆的性质为:A[ Parent ( i ) ] ≤ A[ i ],而排好序的数组性质为A[ i + 1] ≥ A[ i ],二者互不可推。

    6、值为的数组是一个最大堆吗?

解: 将该数组以堆的形式给出: 23 

                                                 17   14

                                          6    13    10    1

                                      5 7    12

其中, 7 > 6,因此并非一个最大堆。

 7、证明: 当用数组表示存储n个元素的堆时,叶节点下标分别为⌊n/2⌋+1,⌊n/2⌋ + 2,…… n。

证明:在最大堆中,叶节点是满足A[ 2i ] ≥ A[ i ]的最小结点(在该简单路径上),在假设叶节点为 j 时,不存在 2j 的结点;假设结点⌊n/2⌋为叶节点,那么则与上述结论相悖,而当j = ⌊n/2⌋+1,Left( j )和Right( j )均大于n&#x



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3