第4-10章作业部分参考答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第4-5章作业答案:1.不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。2、设数组a[1…60,1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为8950。答:不考虑0行0列,利用列优先公式:LOC(aij)=LOC(ac1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L得:LOC(a32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=8950第6章作业答案:1.画出和下列二叉树相应的森林。答:注意根右边的子树肯定是森林,而孩子结点的右子树均为兄弟。2.编写递归算法,计算二叉树中叶子结点的数目。思路:输出叶子结点比较简单,用任何一种遍历算法,凡是左右指针均空者,则为叶子,将其统计并打印出来。Intcount_leaf(Bitreeroot,int&sum)//采用先序遍历的递归算法{if(root!=NULL)//非空二叉树条件,还可写成if(root){if(!root-lchild&&!root-rchild)//是叶子结点则统计并打印{sum++;printf(%d\n,root-data);}count_leaf(root-lchild);//递归遍历左子树,直到叶子处;count_leaf(root-rchild);}//递归遍历右子树,直到叶子处;}return(0);}3.编写递归算法,求二叉树中以元素值为a的结点为根的子树的深度。intGet_Sub_Depth(BitreeT,inta)//求二叉树中以值为x的结点为根的子树深度{if(T-data==x){printf(%d\n,Get_Depth(T));//找到了值为x的结点,求其深度exit1;}}else{if(T-lchild)Get_Sub_Depth(T-lchild,a);if(T-rchild)Get_Sub_Depth(T-rchild,a);//在左右子树中继续寻找}}//Get_Sub_DepthintGet_Depth(BitreeT)//求子树深度的递归算法{if(!T)return0;else{m=Get_Depth(T-lchild);n=Get_Depth(T-rchild);return(mn?m:n)+1;}}//Get_Depth4.假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。试为这8个字母设计哈夫曼编码。使用0~7的二进制表示形式是另一种编码方案。对于上述实例,比较两种方案的优缺点。解:方案1;哈夫曼编码先将概率放大100倍,以方便构造哈夫曼树。w={7,19,2,6,32,3,21,10},按哈夫曼规则:【[(2,3),6],(7,10)】,……19,21,32(100)(40)(60)192132(28)(17)(11)7106(5)23方案比较:方案1的WPL=2(0.19+0.32+0.21)+4(0.07+0.06+0.10)+5(0.02+0.03)=1.44+0.92+0.25=2.6101010119213201010171060123字母编号对应编码出现频率10000.0720010.1930100.0240110.0651000.3261010.0371100.2181110.10字母编号对应编码出现频率111000.072000.193111100.02411100.065100.326111110.037010.21811010.10方案2的WPL=3(0.19+0.32+0.21+0.07+0.06+0.10+0.02+0.03)=3结论:哈夫曼编码优于等长二进制编码第7章作业答案:第9章作业答案:1.假定对有序表:(3,4,5,7,24,30,42,54,63,72,87,95)进行折半查找,试回答下列问题:(1)画出描述折半查找过程的判定树;(2)若查找元素54,需依次与哪些元素比较?(3)若查找元素90,需依次与哪些元素比较?(4)假定每个元素的查找概率相等,求查找成功时的平均查找长度。解:(1)先画出判定树如下(注:mid=(1+12)/2=6):30563374287424547295(2)查找元素54,需依次与30,63,42,54等元素比较;(3)查找元素90,需依次与30,63,87,95,72等元素比较;(4)求ASL之前,需要统计每个元素的查找次数。判定树的前3层共查找1+2×2+4×3=17次;但最后一层未满,不能用8×4,只能用5×4=20次,所以ASL=1/12(17+20)=37/12≈3.082、设哈希(Hash)表的地址范围为0~17,哈希函数为:H(K)=KMOD16。K为关键字,用线性探测法再散列法处理冲突,输入关键字序列:(10,24,32,17,31,30,46,47,40,63,49)造出Hash表,试回答下列问题:(1)画出哈希表的示意图;(2)若查找关键字63,需要依次与哪些关键字进行比较?(3)若查找关键字60,需要依次与哪些关键字比较?(4)假定每个关键字的查找概率相等,求查找成功时的平均查找长度。解:(1)画表如下:012345678910111213141516173217634924401030314647(2)查找63,首先要与H(63)=63%16=15号单元内容比较,即63vs31,no;然后顺移,与46,47,32,17,63相比,一共比较了6次!(3)查找60,首先要与H(60)=60%16=12号单元内容比较,但因为12号单元为空(应当有空标记),所以应当只比较这一次即可。(4)对于黑色数据元素,各比较1次;共6次;对红色元素则各不相同,要统计移位的位数。“63”需要6次,“49”需要3次,“40”需要2次,“46”需要3次,“47”需要3次,所以ASL=1/11(6+2+3×3)=17/11=1.5454545454≈1.55第10章作业答案:1、设要将序列(Q,H,C,Y,P,A,M,S,R,D,F,X)中的关键码按字母序的升序重新排列,则:冒泡排序一趟扫描的结果是:HCQPAMSRDFXY;初始步长为4的希尔(shell)排序一趟的结果是PACSQHFXRDMY;二路归并排序一趟扫描的结果是HQCYAPMSDRFX;快速排序一趟扫描的结果是FHCDPAMQRSYX;堆排序初始建堆的结果是ADCRFQMSYPHX。

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功