




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
肂虿螈聿膅蒂蚄肈芇蚇薀肇荿蒀罿肆腿芃袅肅芁薈螁肄莃莁蚇肄肃薇薃肃膅荿袁膂芈薅螇膁莀莈蚃膀肀薃虿腿节莆羈膈莄蚁袄膈蒇蒄螀膇膆蚀蚆螃艿蒃薂袂莁蚈袀袂肁蒁螆袁膃蚆螂袀莅葿蚈衿蒇莂羇袈膇薇袃袇艿莀蝿袆莂薆蚅羆肁荿薁羅膄薄袀羄芆莇袆羃蒈蚂螂羂膈蒅蚈羁芀蚁薃羀莃蒃袂羀肂虿螈聿膅蒂蚄肈芇蚇薀肇荿蒀罿肆腿芃袅肅芁薈螁肄莃莁蚇肄肃薇薃肃膅荿袁膂芈薅螇膁莀莈蚃膀肀薃虿腿节莆羈膈莄蚁袄膈蒇蒄螀膇膆蚀蚆螃艿蒃薂袂莁蚈袀袂肁蒁螆袁膃蚆螂袀莅葿蚈衿蒇莂羇袈膇薇袃袇艿莀蝿袆莂薆蚅羆肁荿薁羅膄薄袀羄芆莇袆羃蒈蚂螂羂膈蒅蚈羁芀蚁薃羀莃蒃袂羀肂虿螈聿膅蒂蚄肈芇蚇薀肇荿蒀罿肆腿芃袅肅芁薈螁肄莃莁蚇肄肃薇薃肃膅荿袁膂芈薅螇膁莀莈蚃膀肀薃虿腿节莆羈膈莄蚁袄膈蒇蒄螀膇膆蚀蚆螃艿蒃薂袂莁蚈袀袂肁蒁螆袁膃蚆螂袀莅葿蚈衿蒇莂羇袈膇薇袃袇艿莀蝿袆莂薆蚅羆肁荿薁羅膄薄袀羄芆莇袆羃蒈蚂螂羂膈蒅蚈羁芀蚁薃羀莃蒃袂羀肂虿螈聿膅蒂蚄肈芇蚇薀肇荿蒀罿肆腿芃袅肅芁薈螁肄莃莁蚇肄肃薇薃肃膅荿袁 数据结构试题 (开卷)姓名 班级 (电信系本科2002级 2003年12月)题号一二三总分题分323830100得分得 分一、回答下列问题 (每题4分,共32分)1. 对于一个有10000个结点的二叉树,树叶最多有多少个?最少有多少个?答: 最多是完全二叉树的形态,即5000个叶子;最少是单支树的形态,即1个叶子。2. 已知一棵二叉树的中序序列和后序序列分别为: DBGEACHF和DGEBHFCA,则该二叉树的前序序列是什么?答:是:ABDEGCFH3. 设有1000个无序的元素,需排出前10个最大(小)的元素,你认为采用哪种排序方法最快?为什么?答:用锦标赛排序或堆排序很合适,因为不必等全部元素排完就能得到所需结果,时间效率为O(nlog2n); 即O(1000log21000)=O(10000)锦标赛排序的准确比较次数为:n-1+9log2n=999+9log21000=999+910=1089堆排序的准确比较次数为:n-1+9log2n=999+9log21000=999+910=1089若用冒泡排序也较快,最多耗费比较次数为(n-1+n-2+n-10)=10n-55=10000-55=9945(次)4. 在KMP算法中,已知模式串为ADABCADADA ,请写出模式串的nextj函数值。答: 01121123435. 中序遍历的递归算法平均空间复杂度为多少?答: 要考虑递归时占用了栈空间,但递归次数最多不超过树的高度,所以空间复杂度为O(log2n)6. 欲将无序序列(24, 79, 13, 36, 70, 96, 12, 10, 36*, 49, 100, 27)中的关键码按升序重新排列,请写出快速排序第一趟排序的结果序列。另外请画出堆排序(小根堆)的初始堆。答:快速排序第一趟排序的结果序列为:10, 12, 13, 24, 70, 96, 36, 79, 36*, 49, 100, 27(注意要按振荡式逼近算法实现) 2479 1336 70 96 12 10 36*49 100 27 堆排序的初始堆如下,注意要从排无序堆开始,从最后一个非终端结点开始,自下而上调整,而且要排成小根堆! 初始堆序列为: 10,24,12,79,49,27,13,36,36*, 70, 100, 96 1024 1279 49 27 13 36 36*70 100 96 无序堆 有序初始堆7. 已知一组关键字为(10, 24, 32, 17, 31, 30, 46, 47, 40, 63, 49),设哈希函数H(key)key MOD 13。请写出用线性探测法处理冲突构造所得的哈希表。答:012345678910111249401731323046471024638. 算法复杂度O(1)的含义是什么?答:它表示与输入的元素规模无关,是一个常数(但不一定是1)。或:它表示该算法执行时耗费时间的长短或占用辅助空间的多少与元素个数n无关,若能达到这样的时间效率或空间效率,将是最理想的算法。得 分二、综合题(4小题,共38分)1. 下图为某无向图的邻接表,按教材算法7.5和7.6分别写出深度优先搜索和广度优先搜索的结果,并画出逻辑结构图。 (10分) 12345678910A5B 37C267DE1F3G23H910I8J8 答:深度优先搜索(DFS)结果为:AEBCFGDHIJ广度优先搜索(BFS)结果为:AEBCGFDHIJ这是有着4个连通分量的非连通图。A EB C FG H ID J2. 设AH 8个字符出现的概率为: w=0.10, 0.16, 0.01, 0.02, 0.29, 0.10, 0.07, 0.25, 设计最优二进制码并计算平均码长。如果设计最优三进制编码(即可用0,1,2三种符号进行编码),画出最优三叉树并计算平均码长。 (10分) 若按教材算法,合并规律应当如下:平均码长为:PiWi=3(0.10.160.1)5(0.01+0.02)+2(0.29+0.25)+40.07=2.59 0 1.00 0 0.45 0.55 0 0.20 0.25 0.26 0.29 0 0.10 0.10 0 0.03 0.07 A 0.10 0.16 0.01 0.02 A:001B: 101C: 00000D: 00001E: 11F: 100G: 0001H: 01答:最优二进制编码不惟一,但WPL惟一。平均码长仍为:PiWi=2.59A:100B: 001C: 00000D: 00001E: 01F: 101G: 0001H: 11 1.00 0.55 0.45 0.26 0.29 0.20 0.25 0.10 0.16 0.03 0.07 0.10 0.10 0.01 0.02 编码为:A:02B: 21C: 000D: 001E: 1F: 20G: 01H: 22 1.00 0 1 2 0.29 0.51 0 0.20 2 0 0.03 0.07 0.10 0.10 0.16 0.25 0.01 0.02 对三进制编码,由于总共有8个字符,8%3=2,故第一次构建最优树只有2个结点,则最优三叉树为平均码长为:PiWi=10.29+2(0.1+0.16+0.10+0.07+0.25)+ 3(0.01+0.02)=0.29+1.36+0.09=1.743. 给定一个由n个关键字不同的记录构成的序列,你能否用2n-3次比较找出n个元素中的最大值和最小值?如果有,请描述你的方法。最快需多少次比较?(无需写算法) (8分)答:可以实现。选用锦标赛算法。两两元素比较,淘汰较小的,形如一棵二叉树。树根为最大值(此时用掉n-1次比较?)。而最小者一定位于首次被淘汰之列。故只有 n/2个。一共需n-1+ n/2次比较。Void ABC(Bitree p, int l, int &h) if pNIL thenl=l+1; if lh then h=l;ABC(p-Lchild, l,h);ABC(p-Rchild, l,h);此题含义是:求树的深度(h)但求解方法是从根开始计算层次。反而比从叶子往上计算要简单。4. 分析下面算法中l和h变量表示什么含义?初始调用时,l和h应取什么值?其中p为指向二叉树的根结点,如果去掉形参中的“&”符号,会得到什么结果? (10分)解:依分析,l、h表示二叉树的层次数和深度。(l之前千万不能加&符号,否则不通) 开始调用时,应为ABC(p, 0, 0)去掉形参中的“&”号,则上次计算的结果不能正确返回。故h不变,得不到正确结果。这里的int &h应当理解为push形参,每次返回就要return 实参。所以l和h其实是每一层当前的状态。L代表当前结点所在的层数(从根结点计算起);而h代表当前结点所在的深度。附:教材(习题集?)求深度的函数如下:int BTreeDepth(Btree *BT) /*BT为二叉树某结点的指针int leftdep, rightdep; /设左右两个深度/层次计数器if(BT=NULL) return(0); /当前结点指针为空则立即返回else leftdep= BTreeDepth(BT-left); /遍历当前结点左子树 rightdep=BTreeDepth(BT-right); /遍历当前结点右子树 if( leftdeprightdep)return(leftdep+1); /从叶子计数 else return(rightdep+1); /BTreeDepth 得 分三、 算法设计题(每题10分,共30分)顺序表的存储结构为:typedef structElemtype v ;int length;L;算法的核心部分为:void SortA(sqlist &L) int i=0, zerosum =0;if(L.length=0) return(0); /空表else for( i=1; i=L.length; i+)if (L.vi0) L.vi- zerosum= L.vi;else zerosum+;for(i=i-zerosum+1; i=L.length; i+)L.vi=0;1. 试用C或类C语言编写一高效算法,将一顺序存储的线性表(设元素均为整型量)中所有零元素向表尾集中,其他元素则顺序向表头方向集中。解: void SortA(sqlist &L) int i=0, zerosum =0;if(L.length=0) return(0); /空表else for( i=1; i=L.length; i+)if (L.vi0) L.vi- zerosum= L.vi;else ? zerosum+;2. 试编写一个算法,判断一给定的整型数组an是不是一个堆。解:提示:堆的定义是:kik2i和K2i1 void SortA(sqlist &A, int n) if(n=0) return(0); /空表if (a1a2) for( i=1; ia2*i| aia2*i+1)return(-1);return(minleap);else for( i=1; i=n/2; i+) if (aia2*i| ailchild) EnQueue(Q,r.node-lchild, r.layer+1); if(r.node-rchild) EnQueue(Q,r.node-rchild, r.layer+1); /按层序入队时要随时标注结点所在层号 h=r.layer; /最后一个队列元素所在层就是树的高度 for(maxn=count0, i=1; h; i+) if(countimaxn) maxn=counti; /求出哪一层结点数最多 return (h*maxn) / Width 附加题:(15分)法二:若不用辅助数组,不用层数分量也可以,关键在于如何区别层与层。有两种方法:一、通过比较指针判断是否到达新的一层的开始; 二、通过比较指针判断是否到达当前层的末尾.由于方法一对新的一层的开始点不易确定,比较次数要多于第二种,因此推荐第二种。对任意种类的树都适用,二叉树类似可得。算法如下:/-/ TreeWidth 求树的宽度/ 不用辅助数组,不用层数分量/ 思路:/1.以两个整型变量存宽度,一个表示当前层的节点数,一个表示当前已知最大宽度,当遍历完一层后立即判断两者大小,保留大者。/2.通过比较指针判断是否到达本层的末尾,以确定层与层间的关系。/-int TreeWidth(TreeNode * T)int iMaxCount=0,iRecCount=0;/iRecCount当前层的节点数,iMaxCount当前已知最大宽度TreeNode * pP=T,* pLastChild=T;/pP指向当前节点,pFirstChild指向本层最末节点InitQueue(Q);/队列初始化,Q的元素为TreeNode*类型EnQueue(Q,T);/根结点入队while(!QueueEmpty(Q)DeQueue(Q,pP);/结点出队iRecCount+;/出队时再把结点所在层的计数器加1if(hasChild(pP) EnQueue(Q,pP-Child);/有孩子则孩子入队if(pP=pLastChild)/若到达本层的末尾/先决定iMaxCount,再重置iRecCount /求繁茂度不能清零此变量。iMaxCount=max(iMaxCount,iRecCount);iRecCount=0;QueueTail(Q,pLastChild); /读出队尾元素,注意不是出队!/既已到本层末尾,又已将其孩子入队(若有的话),则队尾元素必为下一层的最末元素return iMaxCount;设p、t分别表示两棵没有度为1 的结点的二叉树。设计一种算法,找出p和t中最大的同构子树并分析算法的时间复杂度(无需写出算法,描述思路即可)。注:“同构”是指两个二叉树不仅结点数相同、并且它们的左右子树之间的关系也相同,但各结点的数据值可以不同。“最大的同构子树”即结点最多的同构子树。解: 我们把一棵二叉树用树描述符来表示,则问题会变得容易解决。所谓树描述符,即对每个结点按二叉树先序遍历并输出结点的度。例如左边二叉树的描述符为202202000.在此描述符中,如果一个子串的字符数等于此子串中每个数字之和加1,则此子串一定是一个子树。如上面的字符串中,2202000是一个子树,因为他有7个字符,每个字符数字和为2+2+2=6.同理,20200
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 有关专项施工方案的试题
- 福建省福州文博中学2026届英语九年级第一学期期末质量检测模拟试题含解析
- 教学培训开幕式
- 2026届四川省南充市南部县化学九年级第一学期期中复习检测试题含解析
- 2026届辽宁省葫芦岛市名校英语九上期末达标测试试题含解析
- 幼儿园对督导工作总结
- 肯德基储备经理工作总结
- 2026届吉林省长春市第三中学化学九上期中学业水平测试模拟试题含解析
- 2026届黑龙江省哈尔滨光华中学九上化学期中调研模拟试题含解析
- 2026届辽宁省沈阳134中学九年级化学第一学期期中检测试题含解析
- 机械原理课程设计-自动盖章机
- 会议及活动拍摄技巧
- GB/T 9460-2008铜及铜合金焊丝
- GB/T 2362-1990小模数渐开线圆柱齿轮基本齿廓
- 【桂美版】六年级美术上册-六年级(桂教版)上册美术教案(详案)全
- GB/T 17238-2022鲜、冻分割牛肉
- 第四章集装箱箱务管理
- 高尔夫人群消费及行为习惯调研报告-课件
- 天气预报的发展历程课件
- 2022年国家公务员考试申论真题及答案(地市级)
- 西方法律思想史教案课件
评论
0/150
提交评论