数据结构期终复习 联系客服

发布时间 : 星期六 文章数据结构期终复习更新完毕开始阅读

由(1)(2)及pj?n可知由1,2,…,n可通过一个栈得到序列p1,p2,…,pn。由数学归纳法可知本题结论成立。

四、(本题8分)

【解答】由弗洛伊德(Floyd)算法进行求解,具体步骤如下:

D(?1)?0129?3??0129?3??1206????1206?15?????(0)??9604??,D??960412?; ??????406??406???????3??60???3151260??D(1)?0129?3??0129133??1206?15??12061015?????(2)??960412?,D??960412?; ??????4061310406???????3151260???3151260???0129133??012993??12061015??12061015?????(4)??960412?,D??960410?。 ????1310406910406???????3151060???3151060??D(3)设乡镇vi到其他各乡镇的最远距离为max_disdance(vi),则有:max_disdance(v1)=12,

max_disdance(v2)=15,max_disdance(v3)=10,max_disdance(v4)=10,max_disdance(v5)=15,所以可知消防站应建在v3或v4乡镇,才能使离消防站最远的乡镇到消防站的路程最短。

五、(本题8分)

【解答】对n用归纳法证明。当n=1时,有N1=F3-l=2-l=1到。当n=2时,有N2=F4-1=3-1=2。设n

当n=k+1,对于一个k+l层深度的平衡二叉树而言,其左右子树都是平衡的。结点数为最少的极端情况,故左右子树中的结点数是不相等的,设其中一个是k层深度的二叉平衡树,另一个是k-l层深度的二叉平衡树。所以有:

Nk+1=1+Nk+Nk-1==1+(Fk+2-1)+(Fk+1-1)= Fk+2+Fk+1-1= Fk+3 -1 当n=k+1时成立,由此可知深度为n都等式都成立。 六、(本题8分)

【解答】n个结点的平衡二叉树的最大高度为h?log(5(n?1))?2,设表示高度1?52需xbit,则有关系式:2≥h>2,所以有:

??x??log2h???log2(log1?5(5(n?1))?2)?

2??1?5h?2)(2)设深度为h的平衡二叉树的最少关键字数为nh,则有公式:n?2?1,h5(8

本题中8bit的计数器共可以表示2=256层,即高度为256,从而可知最少有

1?5258()2n??1个关键字。 5七、(本题8分) 【解答】

xx-1

(1)线性探测再散列的哈希表查找成功的平均查找长度为:Snl?解得α≤4/5,也就是12/m≤4/5, 所以m≥15,可取m=15。

(2)散列函数可取为H(key)=key % 13 (3)散列表如表7-4所示。

散列表

0 1 40 2 66 3 94 4 5 5 6 58 7 33 8 47 9 72 10 87 11 22 11(1?)≤3,21??12 25 13 12 14 (4)12个数据 {25,40,33,47,12,66,72,87,94,22,5,58}的比较次数分

别是:1,1,1,1,2,2,3,2,1,3,1,1。

可知查找成功的平均查找次数=(1+1+1+1+2+2+3+2+1+3+1+1)/12=1.25 八、(本题8分)

【解答】有n个叶子结点的带权路径长度最短的二叉树称哈夫曼树,同理,存在有n个叶子结点的带权路径长度最短的三叉、四叉、……、k叉树,也称为哈夫曼树。如叶子结点数目不足以构成正则的k叉树(树中只有度为k或0的结点),即不满足(n-l)MOD(k-l)=0,k-(n-1)MOD(k-1)-1。需要添加权为0的结点,添加权为0的结点的个数为:添加的位置应该是距离根结点的最远处。

所构造出的哈夫曼树如下图所示:

其中,每个字母的编码长度等于叶子结点的路径长度,电文的总长度为

?wl=191。

iii?1n

注释:对于正则的k叉树,设叶结点数为n,度为k的结点数为nk,结点总数为m,

则有m-1=knk,m=nk+n,两式相减可得n-1=(k-1)nk,即(n-l)MOD(k-l)=0;如n与k不满足此关系,n加上k-(n-1)MOD(k-1)-1后,n’= n+(k-(n-1)MOD(k-1)-1),这时:

(n’-l)MOD(k-l)=(n+(k-(n-1)MOD(k-1)-1)-l)MOD(k-l) =((n-1)+(k-1)-(n-1)MOD(k-1))MOD(k-l) =((n-1)-(n-1)MOD(k-1))MOD(k-l) =0。

现有12个初始归并段,其记录数分别为{30,44,8,6,3,20,60,18,9,62,68,85},采用3-路平衡归并,画出最佳归并树。

九、(本题9分)

【解答】设该树中结点总数为N,叶子结点个数为N0,则有:

N??Ni

i?0m (1)

N?1??iNi

i?1mm (2)

由(2)-(1)再经过移项可得:N0?1??(i?1)N

ii?1十、(本题15分) 【解答】

对于排列的解空间可构造一个虚拟的解空间树,比如n=5,k=3时的解空间树如下图所示,可采用对此树进行先序遍历方式进行遍历,并用递归法进行递归输出从n个数中挑选 k个进行排列所得序列。

具体算法实现如下:

// 文件路径名:exam7\\alg.h template

void Arrage(ElemType a[],int k,int n, int outlen=0)

// 操作结果: 回溯法输出排列序列,a[0..k-1]为k个数的排列序列outlen为当前所求排列 // 序列的长度,其中outlen=k时的排列序列为所求;n为list数组长度 { if (k < 0 || k >= n) return; // 此时无排列 int i; // 临时变量 if (outlen == k + 1) { // 得到一个排列 for (i = 0; i < k; i++) { // 输出一个排列 cout << a[i]; // 输出a[i] } cout << \ \ // 用空格分隔不同排列 } else { // 对解空间进行前序遍历,a[outlen..n]有多个排列,递归的生成排列 for (i = outlen; i < n; i++) { // 处理a[i] Swap(a[outlen+1], a[i]); // 交换a[outlen+1]与a[i] Arrage(a, k, n, outlen + 1); // 对序列长度outlen+1递归 Swap(a[outlen+1], a[i]); // 交换a[outlen+1]与a[i] } } }

*模拟试题(八)

注:本套试题选作