画出对长度为10的有序表进行折半查找的判定树

合集下载

Homework

Homework

《数据结构》书面作业第1章绪论一、选择题1. 下面程序段的时间复杂度为()。

for (i=0;i<n;i++)for (j=0;j<m;j++) a[i][j]=0;A. O(m)B. O(n)C. O(m*n)D. O(m/n)2. 下面程序段的时间复杂度为()。

i=1; K=0;While (i<=n-1){k=k*10*i; i++; }A. O(n)B. O(1)C. O(n+1)D. O(n2)3. 下面程序段的时间复杂度为()。

i=1;do{ j=1;do{ printf(“%d\n”,i*j); j++; }while (j>n)i++;}while (i>n);A. O(n)B. O(1)C. O(n2)D. O(n3)4. 下面程序段的时间复杂度为()。

I=0; S=0;While (s<n) {I++; s=s+I; };A. O(n)B. O(n2)C. O(n1/2)D. O(n3)5. 起泡排序算法在最坏情况下的时间复杂度为()。

A. O(n)B. O(n2)C. O(n3)D. O(n4)6. 设问题的规模为n,分析以下程序段:k=n; m=0; /* n>1 */while (k>=(m+1)*(m-1)) m++;以上程序段的算法时间复杂度是()。

A. O(n)B. O(1)C. O(n1/2)D. O(n2)7. 设问题规模为n,分析以下程序段:a=10; b=100;while (b>0) { a++; b--; }以下程序段的算法时间复杂度是()。

A. O(1)B. O(n)C. O(n2)D. O(n1/2)二、应用题1. 有一种数据结构B1=(D,R),其中:D={1,5,8,12,20,26,34}R={r}r={<1,8>,<8,34>,<34,20>,<20,12>,<12,26>,<26,5>}画出其逻辑结构表示并说明其属于哪一种逻辑结构。

画出对长度为10的有序表进行折半查找的判定树

画出对长度为10的有序表进行折半查找的判定树

第九章 查找作业:=============================================================================== ◆② 画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成 功的平均查找长度。

参考答案:等概率查找时查找成功的平均查找长度为ASL succ =(1*1+2*2+3*4+4*3)/10 =【◆③ 已知含12个关键字的有序表及其相应权值为:优查找树,并计算它的PH 值;¥ (2)画出对以上有序表进行折半查找的判定树,并计算它的PH 值。

参考答案:(1)<(2) 折半查找的判定树的PH 值为156。

对BCD 调整后的次优查找树:其PH 值为134《对次优查找树的调整操作的分析(以下摘自刘文予老师回复邮件)分析:什么是次最优并没有一个严格的定义,与我们的实际工程的要求有关。

1. 调整是必须的,否则按书上算法的构造方法构造的查找树离次最优有距离,但是,调整的工作量不能太大,否则,我们可以直接构造最优查找树(用次最优查找树是为了降低构造最优查找树的时间复杂度),显然调整的结果与最优查找树的误差精度与时间复杂度有关,精度越高,时间复杂度越大。

书上所说的“适当”比较模糊,没有统一的说法,根据实际的要求选择一个“适当”的调整标准。

2. 书上的参考答案是133,非唯一的标准答案,134也是可取的答案。

它是只对根结点进行调整,而书上的方法是对所有的子树的根结点进行调整,显然书上的方法精度更优,但是时间复杂度增大,具体,结果134的方法是O(log2n),书上的方法是O(n*log2n),但我们注意构造次最优查找树的时间复杂度是O(n*log2n),即我们对所有的子树的根结点进行调整不会增加构造算法的时间复杂度(会增加一些时间,如增加30%),说明对所有的子树的根结点进行调整是可行的。

需强调一点,两种方法都是正确的,没有标准的答案。

苏州大学872考研试题12-15

苏州大学872考研试题12-15

1、在任何需要数据反转的问题里,首先应考虑用来保存数据。

2、在顺序线性表下,根据位置position来进行元素的插入和删除,主要的时间花费在;在单链表下进行元素的插入和删除,主要时间花费在。

3、一个10×10的矩阵,如果以行为主序存入内存,则其容量为。

设a11是第一个元素,其存储地址为1,每元素占1个地址空间,则a85的地址为。

4、在线性表改进的单链表实现方法中,我们定义了一个current指针指向最近访问过的结点,定义的方法是:mutable Node<List_entry> *current;请解释这里mutable的作用:。

5、用二分查找方法进行查找,要求数据文件应为,且限于存储结构。

6、在哈希查找中,评判一个哈希函数优劣的两个主要指标是:______________ 和。

7、快速排序的最坏时间复杂度为;平均时间复杂度为。

8、图的遍历算法有两种:和。

9、由三个结点构成的二叉树,共有种不同的结构。

二、应用题(40分)1、设有n个无序记录的顺序表(每一条记录由一个对应的关键字),简述利用二叉查找树对此记录表进行树排序的方法。

(10分)2、队列采用顺序结构实现(linear implementation)时,随着元素的出队,数组开始处的空间不能再次利用。

如何解决这个问题?(10分)(10分)KG4、简述堆排序的基本方法,并对键值集合,{72,73,71,23,94,16,05,68}对应的二叉树建大顶堆。

(10分)三、算法设计题(30分)1、设计一个递归算法,计算二叉树叶结点数目。

(10分)template <class Entry>int Binary_tree<Entry> :: recursive_leafcount(Binary_node<Entry> *sub_root) const 2、以顺序存储结构实现两个有序表A、B的合并,合并结果放在A中。

画出对长度为10的有序表进行折半查找的判定树

画出对长度为10的有序表进行折半查找的判定树

第九章 查找作业:9.3 9.8 9.31 9.33===============================================================================◆9.3② 画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成 功的平均查找长度。

参考答案:等概率查找时查找成功的平均查找长度为ASL succ =(1*1+2*2+3*4+4*3)/10 =2.9◆9.8③ 已知含12个关键字的有序表及其相应权值为:(1)试按次优查找树的构造算法并加适当调整画出由这12个关键字构造所得的次 优查找树,并计算它的PH 值;(2)画出对以上有序表进行折半查找的判定树,并计算它的PH 值。

参考答案:(1) 次优查找树如下所示,其PH 值为133;(2)对BCD 调整后的次优查找树:其PH 值为134对次优查找树的调整操作的分析(以下摘自刘文予老师回复邮件)分析:什么是次最优并没有一个严格的定义,与我们的实际工程的要求有关。

1. 调整是必须的,否则按书上算法9.3的构造方法构造的查找树离次最优有距离,但是,调整的工作量不能太大,否则,我们可以直接构造最优查找树(用次最优查找树是为了降低构造最优查找树的时间复杂度),显然调整的结果与最优查找树的误差精度与时间复杂度有关,精度越高,时间复杂度越大。

书上所说的“适当”比较模糊,没有统一的说法,根据实际的要求选择一个“适当”的调整标准。

2. 书上的参考答案是133,非唯一的标准答案,134也是可取的答案。

它是只对根结点进行调整,而书上的方法是对所有的子树的根结点进行调整,显然书上的方法精度更优,但是时间复杂度增大,具体,结果134的方法是O(log2n),书上的方法是O(n*log2n),但我们注意构造次最优查找树的时间复杂度是O(n*log2n),即我们对所有的子树的根结点进行调整不会增加构造算法的时间复杂度(会增加一些时间,如增加30%),说明对所有的子树的根结点进行调整是可行的。

折半查找判定树及平均查找长度

折半查找判定树及平均查找长度

折半查找判定树及平均查找长度从折半查找的过程看,以有序表的中间记录作为比较对象,并以中间记录将表分割为两个子表,对子表继续上述操作。

所以,对表中每个记录的查找过程,可用二叉树来描述,二叉树中的每个结点对应有序表中的一个记录,结点中的值为该记录在表中的位置。

通常称这个描述折半查找过程的二叉树为折半查找判定树。

长度为n的折半查找判定树的构造方法为:⑴当n=0时,折半查找判定树为空;⑵当n>0时,折半查找判定树的根结点是有序表中序号为mid=(n+1)/2的记录,根结点的左子树是与有序表r[1] ~ r[mid-1]相对应的折半查找判定树,根结点的右子树是与r[mid+1] ~ r[n]相对应的折半查找判定树。

例如,长度为10的折半查找判定树的具体生成过程为:⑴在长度为10的有序表中进行折半查找,不论查找哪个记录,都必须先和中间记录进行比较,而中间记录的序号为(1+10)/2=5(注意是整除即向下取整),即判定树的根结点是5,如图7-2(a)所示;⑵考虑判定树的左子树,即将查找区间调整到左半区,此时的查找区间是[1,4],也就是说,左分支上为根结点的值减1,代表查找区间的高端high,此时,根结点的左孩子是(1+4)/2=2,如图7-2(b)所示;⑶考虑判定树的右子树,即将查找区间调整到右半区,此时的查找区间是[6,10],也就是说,右分支上为根结点的值加1,代表查找区间的低端low,此时,根结点的右孩子是(6+10)/2=8,如图7-2(c)所示;⑷重复⑵⑶步,依次确定每个结点的左右孩子,如图7-2(d)所示。

历史老照片不能说的秘密慈禧军阀明末清初文革晚清对于折半查找判定树,需要补充以下两点:⑴折半查找判定树是一棵二叉排序树,即每个结点的值均大于其左子树上所有结点的值,小于其右子树上所有结点的值;⑵折半查找判定树中的结点都是查找成功的情况,将每个结点的空指针指向一个实际上并不存在的结点——称为外结点,所有外结点即是查找不成功的情况,如图7-2(e)所示。

数据结构(c语言版)程海英-习题答案.docx

数据结构(c语言版)程海英-习题答案.docx

1. 解释下列术语:数据、数据元素、数据对象、数据结构、存储结构、线性结构、算法、 抽象数据类型。

略。

2. 试举一个数据结构的例子,叙述其逻辑结构、存储结构及运算3方面的内容。

当你拿起一本厚厚的汉语字典查找某一个汉字时,你首先必须知道你使用的字典的编 码方法,然后才能按照偏傍部首、四角号码或者拼音等相应的编码方法较快地查到你所需 要查找的汉字。

3. 选择题A. 动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。

A. 数据具有同一待点B. 不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C. 每个数据元素都一样D. 数据元素所包含的数据项的个数要相等 4)以下说法正确的是( )。

A. 数据元素是数据的最小单位B. 数据项是数据的基本单位C. 数据结构是带有结构的各数据项的集合D. 一些表面上很不相同的数据可以有相同的逻辑结构4. 填空题1) 数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象 及它们之间的 关系 和运算等的学科。

2) 数据结构被形式定义为(D,R ),其中。

是_数据元素的有限集合,R 是D 上的关系有限集合。

3) 数据结构包括数据的 逻辑结构、数据的 存储结构 和数据的 运算 这三个方而的内容。

4) 线性结构小元素之间存在一对一关系,树形结构中元素之间存在一对多关系,1)在数据结构小,从逻辑上可以把数据结构分成( )。

A. 存储结构B. 存储实现C. 逻辑结构D. 运算实现 5)以下数据结构中,( )是非线性数据结构 A.树B.字符串C.队D.栈图形结构中元素Z间存在多对多关系。

5)一个算法的效率可分为时间效率和空间效率。

5.试分析下血各算法的时间复杂度。

1)x=90; y=100;while(y>0) if(x>100){x=x-10;y-;}else x++;0(1)2)for (i=0; ivn; i++)for (j=0; j<m; j++)a[i][j]=O;0 (m*n)3)for(int i=l;i<=n;i++)for(intj=l;j<=i;j++)s++;0 (n2)4)i=l;while(i<=n)i=i*2;0 (log2n)5)i=0,sl=0,s2=0;while(i+4-<n){if(i%2)sl+=i;else s2+=i;}0 (n)6)x=n; //n>ly=o;while(x>=(y+l)* (y+1))y++;0(G)1.线性表有两种存储结构,分别是顺序表和链表。

《数据结构》课后参考答案

《数据结构》课后参考答案

单元练习1一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)数据的逻辑结构与数据元素本身的内容和形式无关。

(√)(2)一个数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。

(ㄨ)(3)数据元素是数据的最小单位。

(ㄨ)(4)数据的逻辑结构和数据的存储结构是相同的。

(ㄨ)(5)程序和算法原则上没有区别,所以在讨论数据结构时可以通用。

(√)(6)从逻辑关系上讲,数据结构主要分为线性结构和非线性结构两类。

(√)(7)数据的存储结构是数据的逻辑结构的存储映像。

(√)(8)数据的物理结构是指数据在计算机内实际的存储形式。

(ㄨ)(9)数据的逻辑结构是依赖于计算机的。

(√)(10)算法是对解题方法和步骤的描述。

二.填空题(1)数据有逻辑结构和存储结构两种结构。

(2)数据逻辑结构除了集合以外,还包括:线性结构、树形结构和图形结构。

(3)数据结构按逻辑结构可分为两大类,它们是线性结构和非线性结构。

(4)树形结构和图形结构合称为非线性结构。

(5)在树形结构中,除了树根结点以外,其余每个结点只有 1 个前趋结点。

(6)在图形结构中,每个结点的前趋结点数和后续结点数可以任意多个。

(7)数据的存储结构又叫物理结构。

(8)数据的存储结构形式包括:顺序存储、链式存储、索引存储和散列存储。

(9)线性结构中的元素之间存在一对一的关系。

(10)树形结构结构中的元素之间存在一对多的关系,(11)图形结构的元素之间存在多对多的关系。

(12)数据结构主要研究数据的逻辑结构、存储结构和算法(或运算)三个方面的内容。

(13)数据结构被定义为(D,R),其中D是数据的有限集合,R是D上的关系的有限集合。

(14)算法是一个有穷指令的集合。

(15)算法效率的度量可以分为事先估算法和事后统计法。

(16)一个算法的时间复杂性是算法输入规模的函数。

(17)算法的空间复杂度是指该算法所耗费的存储空间,它是该算法求解问题规模n 的函数。

《数据结构》习题集:第9章查找(第1次更新2019-5)

《数据结构》习题集:第9章查找(第1次更新2019-5)

第9章查找一、选择题1.顺序查找一个共有n个元素的线性表,其时间复杂度为(),折半查找一个具有n个元素的有序表,其时间复杂度为()。

【*,★】A.O(n)B. O(log2n)C. O(n2)D. O(nlog2n)2.在对长度为n的顺序存储的有序表进行折半查找,对应的折半查找判定树的高度为()。

【*,★】A.nB.C.D.3.采用顺序查找方式查找长度为n的线性表时,平均查找长度为()。

【*】A.nB. n/2C. (n+1)/2D. (n-1)/24.采用折半查找方法检索长度为n的有序表,检索每个元素的平均比较次数()对应判定树的高度(设高度大于等于2)。

【**】A.小于B. 大于C. 等于D. 大于等于5.已知有序表(13,18,24,35,47,50,62,83,90,115,134),当折半查找值为90的元素时,查找成功的比较次数为()。

【*】A. 1B. 2C. 3D. 46.对线性表进行折半查找时,要求线性表必须()。

【*】A.以顺序方式存储B. 以链接方式存储C.以顺序方式存储,且结点按关键字有序排序D. 以链接方式存储,且结点按关键字有序排序7.顺序查找法适合于存储结构为()的查找表。

【*】A.散列存储B. 顺序或链接存储C. 压缩存储D. 索引存储8.采用分块查找时,若线性表中共有625个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分()个结点最佳。

【**】A.10B. 25C. 6D. 6259.从键盘依次输入关键字的值:t、u、r、b、o、p、a、s、c、l,建立二叉排序树,则其先序遍历序列为(),中序遍历序列为()。

【**,★】A.abcloprstuB. alcpobsrutC. trbaoclpsuD. trubsaocpl10.折半查找和二叉排序树的时间性能()。

【*】A.相同B. 不相同11.一棵深度为k的平衡二叉树,其每个非终端结点的平衡因子均为0,则该树共有()个结点。

数据结构第8章 查找 答案

数据结构第8章 查找 答案

第8章 查找 测试题 及答案一、填空题1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是 顺序查找(线性查找) 。

2. 线性有序表(a 1,a 2,a 3,…,a 256)是从小到大排列的,对一个给定的值k ,用二分法检索表中与k 相等的元素,在查找不成功的情况下,最多需要检索 8 次。

设有100个结点,用二分法查找时,最大比较次数是 7 。

3. 假设在有序线性表a[20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结点数为 2 ;比较四次查找成功的结点数为 8 ;平均查找长度为 3.7 。

解:显然,平均查找长度=O (log 2n )<5次(25)。

但具体是多少次,则不应当按照公式)1(log 12++=n nn ASL 来计算(即(21×log 221)/20=4.6次并不正确!)。

因为这是在假设n =2m -1的情况下推导出来的公式。

应当用穷举法罗列:全部元素的查找次数为=(1+2×2+4×3+8×4+5×5)=74; ASL =74/20=3.7 !!!4.【计研题2000】折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素 28,6,12,20 比较大小。

5. 在各种查找方法中,平均查找长度与结点个数n 无关的查找方法是 散列查找 。

6. 散列法存储的基本思想是由 关键字的值 决定数据的存储地址。

7. 有一个表长为m 的散列表,初始状态为空,现将n (n<m )个不同的关键码插入到散列表中,解决冲突的方法是用线性探测法。

如果这n 个关键码的散列地址都相同,则探测的总次数是 n(n-1)/2=( 1+2+…+n-1) 。

(而任一元素查找次数 ≤n-1)二、单项选择题( B )1.在表长为n的链表中进行线性查找,它的平均查找长度为A. ASL=n; B. ASL=(n+1)/2;C. ASL=n +1; D. ASL≈log2(n+1)-1( A )2.折半查找有序表(4,6,10,12,20,30,50,70,88,100)。

电大《数据结构(本)》复习题及答案

电大《数据结构(本)》复习题及答案

数据结构(本)复习题一、单项选择题(每小题2分,共30分)1.深度为5的完全二叉树共有20个结点,则第5层上有()个结点(根所在结点为第一层)。

A.3 B.8C.5 D.62.已知一个图的边数为ii,则该图的所有顶点的度数之和为( )。

A.2m B.mC.2m+1 D.m/23.数据结构中,与所使用的计算机无关的是数据的( )结构。

A.物理B.存储C.逻辑与物理D.逻辑4.链表所具备的特点是().A.可以随机访问任一结点B.占用连续的存储空间C.插人删除不需要移动元素结点D.可以通过下标对链表进行直接访问5.线性表只要以()方式存储就能进行折半查找。

A.链接B.顺序C.关键字有序的顺序D.二又树6.散列查找的原理是( )。

A.在待查记录的关键字值与该记录的存储位置之间建立确定的对应关系B.按待查记录的关键字有序的顺序方式存储C.按关键字值的比较进行查找D.基于二分查找的方法7.对n个元素进行冒泡排序若某趟冒泡中只进行了()次元素间的交换,则表明序列已经排好序。

A.1 B.2C.0 D.n-18.排序过程中,每一趟从无序子表中将一个待排序的记录按其关键字的大小放置到已经排好序的子序列的适当位置,直到全部排好序为止,该排序算法是()。

A.直接插入排序B.快速排序C.冒泡排序D.选择排序9.在对一组元素(64,48,106,33,25,82,70,55,93)进行直接插入排序时,当进行到要把第7个元素70插入到已经排好序的子表时,为找到插人位置,需进行()次元素n的比较(指由小到大排序).A.6 B.2C.3 D.410.采用顺序查找法对长度为n的线性表进行查找(不采用表尾设监视哨的方法),最坏的情况下要进行()次元素间的比较。

A.n+2 B.nC.n—1 D.n/211如图,若从顶点a出发按广度优先搜索法进行遍历,则可能得到的顶点序列为()。

A.acebdgf B.abecdgfC.acfedgb D.abecfdg12.元素2,4,6,8按顺序依次进栈,则该栈的不可能输出序列是( )(进栈出栈可以交替进行).A.8,6,4,2 B.2,4,6,8C.4,2,8,6 D.8,6,2,413.排序方法中,从未排序序列中挑选元素,并将其依次放人已排序序列(初始为空)的一端的方法,称为( )排序.A.归并B.插人C.选择D.快速I4.一棵哈夫曼树总共有23个结点,该树共有()个叶结点(终端结点)。

数据结构习题

数据结构习题

第一章 绪论练习一1、 设有数据逻辑结构为Data-Structure = (D,S),其中D={d 1, d 2, …, d 9},S={r},r={< d 1,d 3>, < d 1, d 8>,< d 2, d 3>, <d 2, d 4>, <d 2, d 5>, <d 3, d 9>,<d 5, d 6>,<d 8, d 9>,<d 9, d 7>,<d 4,d 6>,<d 4, d 7>},画出这个逻辑结构的图示,对于关系r ,那些结点是起始结点,那些结点是终端结点?2、 设n 为整数,试确定下列各程序中前置以@语句的频度(1) FOR (i=1;i<=n;i++){FOR (j=1;j<=i;j++){FOR (k=1;k<=j;k++) @ x+=delta; } }(2) X=91;y=100;WHILE (y>0){@ if (x>100) {x-=10;y--;} else x++; }3、 按增长率由小到大的顺序排列下列各函数:,log,log,,!,,,,)34(,)32(,)23(,22223100nn n n n n n n n n n nnnn n n n 2log22222,log),(loglog ,log4、设有以下三个函数:f(n)=21n 4+ n 2+1000, g(n)=15 n 4 +500n 3 h(n)=5000 n 3.5+nlogn判断下列断言正确与否: (1) f(n)是O(g(n)); (2) h(n)是O(f(n)); (3) g(n)是O(h(n)); (4) h(n)是 O(n 3.5) (5) h(n)是 O(nlogn) 5、试用数学归纳法证明:(1)∑=+--=ni n i x x x 01)1/()1( )且(01≥≠n x (2)∑==-ni n i 12)12()(1≥n 6、试写一算法自大到小依次输出顺序读入的三个整数X 、Y 、Z 的值。

西南交大数据结构主观题作业

西南交大数据结构主观题作业

弘成无锡数字化学习中心批次层次:专升本专业:计算机科学与技术姓名:刘鹏亮学号:第一次作业三、主观题(共3道小题)14.数据的物理结构包括的表示和的表示。

参考答案:线性结构,非线性结构15.数据逻辑结构包括、、和四种,树结构和图结构统称为。

参考答案:集合、线性结构、树、图、非线性结构16.数据结构研究的是和以及它们之间的相互关系,并对于这种结构定义相应的,设计出相应的。

参考答案:逻辑结构,物理结构,运算,算法第二次作业三、主观题(共22道小题)24.向一个长度为n的顺序表中的第i个元素之前插入一个元素时,需要向后移动个元素。

参考答案:n-i+125.在一个长度为n的顺序表中删除第i个元素时,需要向前移动元素。

参考答案:n-i26.在单链表中设置头结点的作用是。

参考答案:简单插入、删除算法27.在单链中要删除某一指定结点,必须找到该结点的结点。

参考答案:直接前驱28.访问单链表中的结点,必须沿着依次进行。

参考答案:指针域29.在双链表中每个结点有两个指针域,一个指向,一个指向。

参考答案:直接前驱结点,直接后继结点30.在链表中,删除最后一个结点的算法时间复杂度为O(1)。

参考答案:双向循环31.访问一个线性表中具有给定值的时间复杂度的数量级是。

参考答案:O(n)32.由n个数据元素生成一个顺序表,若每次都调用插入算法把一个元素插入到表头,则整个算法的时间复杂度插入算法把一个元素插入到表尾,则整个算法的时间复杂度为。

参考答案:O(n) , O(n2)33.在链表中,可以用表尾指针代替表头指针。

参考答案:双向34.在链表中,可以用表尾指针代替表头指针。

参考答案:双向35.根据n个数据元素建立对应的顺序表和单链表存储结构,其算法的时间复杂度最好的情况是,最是。

参考答案:O(n) ,O(n2)36.求线性表的顺序存储和链式存储的长度的算法时间复杂度分别是和。

参考答案:O(1) , O(n)37.在一个带头结点的单链表中,在表头插入或删除与在其他位置插入或删除,其操作过程是否相同?参考答案:相同38.在一个不带头结点的单链表中,在表头插入或删除与在其他位置插入或删除,其操作过程是否相同?。

数据结构Ch习题答案

数据结构Ch习题答案

Ch9查找一、单项选择题1.顺序查找法适合于存储结构为B的线性表..A.散列存储 B.顺序存储或链接存储 C.压缩存储 D.索引存储2.对线性表进行二分查找时;要求线性表必须C..A.以顺序方式存储 B.以链接方式存储C.以顺序方式存储;且结点按关键字有序排序 D.以链接方式存储;且结点按关键字有序排序3.采用顺序查找方法查找长度为n的线性表时;每个元素的平均查找长度为C.. A.n B.n/2 C.n+1/2 D.n-1/24.采用二分查找方法查找长度为n的线性表时;每个元素的平均查找长度为D..A.On2 B. Onlog2n C.On D.Olog2n5.二分查找和二叉排序树的时间性能B..A.相同 B.不相同就平均时间性能而言;二叉排序树上的查找和二分查找差不多..就维护表的有序性而言;二叉排序树无须移动结点;只需修改指针即可完成插入和删除操作;且其平均的执行时间均为Olog2n;因此更有效..二分查找所涉及的有序表是一个向量;若有插入和删除结点的操作;则维护表的有序性所花的代价是On..当有序表是静态查找表时;宜用向量作为其存储结构;而采用二分查找实现其查找操作;若有序表里动态查找表;则应选择二叉排序树作为其存储结构..6.有一个有序表为{1;3;9;12;32;41;45;62;75;77;82;95;100};当二分查找值82为的结点时;C次比较后查找成功..A.1 B.2 C.4 D.87.有一个长度为12的有序表;按二分查找法对该表进行查找;在表内各元素等概率情况下查找成功所需的平均比较次数为B..A.35/12 B.37/12 C.39/12 D.43/128.根据一组记录 56; 42; 50; 64; 48 依次插入结点生成一棵AVL树高度平衡的二叉搜索树时;当插入到值为 50 的结点时需要进行旋转调整..9.向一棵二叉搜索树中插入一个新元素时;若该新元素的值大于根结点的值;则应把它插入到根结点右子树上..10.根据一组记录 56; 42; 73; 50; 64; 48; 22 依次插入结点生成一棵AVL树高度平衡的二叉搜索树时;当插入到值为 48 的结点时才出现不平衡;需要进行旋转调整..11.以顺序搜索方法从长度为n的顺序表或单链表中搜索一个元素时;其时间复杂度为On ..12.在一棵AVL树高度平衡的二叉搜索树中;每个结点的左子树高度与右子树高度之差的绝对值不超过 1 ..13.在线性表的散列存储中;装载因子 a 又称为装载系数;若用m表示散列表的长度;n 表示待散列存储的元素的个数;则 a 等于 n/m ..n.. 14.以折半搜索方法从长度为n的有序表中搜索一个元素时;时间复杂度为 Olog2 15.假定一个顺序表的长度为40;并假定搜索每个元素的概率都相同;则在搜索成功情况下的平均搜索长度为 20.5 ..16.假定要对长度n = 100的线性表进行散列存储;并采用开散列法处理冲突;则对于长度m = 20的散列表;每个散列地址的同义词子表单链表的长度平均为 5 ..17.假定对长度n = 50的有序表进行折半搜索;则对应的判定树中最后一层的结点数为 19 个..1 2 4 8 16 1918.根据n个元素建立一棵二叉搜索树二叉排序树的时间复杂度性大致为 Onlogn ..2 19.从一棵二叉搜索树中搜索一个元素时;若给定值小于根结点的值;则需要向左子树继续搜索..20.假定一个线性表为”abcd”; ”baabd”; ”bcef”; ”cfg”; ”ahij”; ”bkwte”; ”ccdt”; ”aayb”;若按照字符串的第一个字母进行划分;使得第一个字母相同的字符串被划分在一个子表中;则得到的以a为第一个字母的子表长度 3 ..21.假设在有序线性表A1..20上进行二分查找;则比较一次查找成功的结点数为1;则比较二次查找成功的结点数为2;则比较三次查找成功的结点数为4;则比较四次查找成功的结点数为8;则比较五次查找成功的结点数为5;平均查找长度为3.7.. 22.对于长度为n的线性表;若进行顺序查找;则时间复杂度为On;若采用二分法查找;则时间复杂度为Ologn ..223、对长度为3的顺序表进行搜索;若搜索第一个元素的概率为1/2;搜索第二个元素的概率为1/3;搜索第三个元素的概率为1/6;则搜索到表中任一元素的平均搜索长度为 A ..A.5/3 B.2 C.7/3 D.4/31/23+1/32+1/61=9/6+4/6+1/6=7/31/21+1/32+1/63=3/6+4/6+3/6=5/324、向一棵AVL树高度平衡的二叉搜索树插入元素时;可能引起对最小不平衡子树的双向旋转的调整过程;此时需要修改相关 C 个结点指针域的值..A.2 B.3 C.4 D.525、向一棵AVL树高度平衡的二叉搜索树插入元素时;可能引起对最小不平衡子树的调整过程;此调整分为 C种旋转类型..A.2 B.3 C.4 D.526、向一棵AVL树高度平衡的二叉搜索树插入元素时;可能引起对最小不平衡子树的左单或右单旋转的调整过程;此时需要修改相关 C个结点指针域的值..A.2 B.3 C.4 D.5三、判断题:1.×对二叉搜索树进行前序遍历得到的结点序列是一个有序序列..2.√折半搜索所对应的判定树;既是一棵二叉搜索树;又是一棵理想平衡二叉树它的特点是除最底层结点外其他各层结点数都是满的;最底层的若干结点可能散布在该层各处..3.√装载因子是散列表的一个重要参数;它反映了散列表的装满程度..4.√对于两棵具有相同记录集合而具有不同结构的二叉搜索树;按中序遍历得到的结点序列是相同的..三、综合练习题:1.画出对长度为10的有序表进行折半查找的判定树;并求其等概率时查找成功的平均查找长度..等概率时查找成功的平均查找长度=11+22+43+34/10=2.92.已知一组关键字{49;38;65;97;76;13;27;44;82;35;50};画出由此生成的二叉排序树和平衡二叉树..二叉排序树:平衡二叉树:3.设某字典组成如下∶D={016; 087; 154; 170; 275; 426; 503; 509; 512; 612; 653; 677; 703; 765; 897; 908}依次顺序表示在内存中;现用二分法的方法查找字典中是否有元素612;问需要进行多少次比较才能得到结论每次选择的比较对象是什么元素解:比较次数为3次;第一次和509比较;第二次和677比较;第三次和612比较.. 4.试给出一个关键码序列;使构造AVL树时四种调整平衡操作 LL; LR; RR; RL 各至少执行一次;并画出其构造过程..:解:设输入序列为{12;6;4;16;24;15;13;1;3}5.设顺序表中关键字是递增有序的;试写一顺序查找算法;将哨兵设在表的高下标端..解:Search_SeqSSTable ST; KeyType key{//顺序查找的算法;n号元素为监视哨ST.elemn.key=key; //哨兵for i=0; EQST.elemi.key;key;++i;return i;}6.什么叫静态查找什么叫动态查找什么样的存储结构适宜于进行静态查找什么样的存储结构适宜于进行动态查找7.什么叫平均查找长度写出平均查找长度的定义..8.已知一个个数为12的数据元素序列为{Dec; Feb; Nov; Oct; June; Sept; Aug; Apr; May; July; Jan; Mar};要求:1按各数据元素的顺序构造一棵二叉排序树..2设各数据元素的查找概率相等;给出该二叉排序树的平均查找长度..注:字母的大小是指字母的ASCII码数值大小3按各数据元素的顺序构造一棵平衡二叉树..解:1构造的二叉排序树:2平均查找长度为:11+22+23+24+35+26/12=46/12=23/63构造的平衡二叉树:9.使用散列函数hash x = x %11; 把一个整数值转换成散列表地址..现要把数据1; 13; 12; 34; 38; 33; 27; 22 插入到散列表中..1 使用线性探查再散列法来构造散列表..2 使用链地址法构造散列表..针对这两种情况; 确定其装载因子; 搜索成功所需的平均探查次数; 以及搜索不成功所需的平均探查次数..解:1Hash1=1;成功hash13=2;成功hash12=1;冲突;hash12=2;冲突;hash12=3;成功;hash34=1;hash34=2;冲突;hash34=3;冲突;hash34=3;冲突;hash34=4;成功hash38=5;成功hash33=0;成功hash27=5;冲突; hash27=6;成功hash22=0;冲突;hash22=1;冲突;hash22=2;冲突;hash22=3;冲突;hash22=4;冲突;hash22=5;冲突;hash22=6;冲突;hash22=7;成功线性探查再散列法来构造的散列表装载因子=8/11搜索成功所需的平均探查次数=1+1+1+3+4+1+2+8/8=21/8搜索不成功所需的平均探查次数=9+8+7+6+5+4+3+2+1+1+1/11=47/11 2 使用链地址法构造的散列表装载因子=8/11搜索成功所需的平均探查次数=1+1+1+1+2+2+2+3/8=13/8搜索不成功所需的平均探查次数=3+4+2+1+1+3+1+1+1+1+1/11=19/11。

数据结构---C语言描述-(耿国华)-课后习题答案

数据结构---C语言描述-(耿国华)-课后习题答案

第一章习题答案2、××√3、(1)包含改变量定义的最小范围(2)数据抽象、信息隐蔽(3)数据对象、对象间的关系、一组处理数据的操作(4)指针类型(5)集合结构、线性结构、树形结构、图状结构(6)顺序存储、非顺序存储(7)一对一、一对多、多对多(8)一系列的操作(9)有限性、输入、可行性4、(1)A(2)C(3)C5、语句频度为1+(1+2)+(1+2+3)+…+(1+2+3+…+n)第二章习题答案1、(1)一半,插入、删除的位置(2)顺序和链式,显示,隐式(3)一定,不一定(4)头指针,头结点的指针域,其前驱的指针域2、(1)A(2)A:E、AB:H、L、I、E、AC:F、MD:L、J、A、G或J、A、G(3)D(4)D(5)C(6)A、C3、头指针:指向整个链表首地址的指针,标示着整个单链表的开始。

头结点:为了操作方便,可以在单链表的第一个结点之前附设一个结点,该结点的数据域可以存储一些关于线性表长度的附加信息,也可以什么都不存。

首元素结点:线性表中的第一个结点成为首元素结点。

4、算法如下:int Linser(SeqList *L,int X){ int i=0,k;if(L->last>=MAXSIZE-1){ printf(“表已满无法插入”);return(0);}while(i<=L->last&&L->elem[i]<X)i++;for(k=L->last;k>=I;k--)L->elem[k+1]=L->elem[k];L->elem[i]=X;L->last++;return(1);}5、算法如下:#define OK 1#define ERROR 0Int LDel(Seqlist *L,int i,int k){ int j;if(i<1||(i+k)>(L->last+2)){ printf(“输入的i,k值不合法”);return ERROR;}if((i+k)==(L->last+2)){ L->last=i-2;ruturn OK;}else{for(j=i+k-1;j<=L->last;j++)elem[j-k]=elem[j];L->last=L->last-k;return OK;}}6、算法如下:#define OK 1#define ERROR 0Int Delet(LInkList L,int mink,int maxk){ Node *p,*q;p=L;while(p->next!=NULL)p=p->next;if(mink<maxk||(L->next->data>=mink)||(p->data<=maxk)) { printf(“参数不合法”);return ERROR;}else{ p=L;while(p->next-data<=mink)p=p->next;while(q->data<maxk){ p->next=q->next;free(q);q=p->next;}return OK;}}9、算法如下:int Dele(Node *S){ Node *p;P=s->next;If(p= =s){printf(“只有一个结点,不删除”);return 0;}else{if((p->next= =s){s->next=s;free(p);return 1;}Else{ while(p->next->next!=s)P=p->next;P->next=s;Free(p);return 1;}}}第三章习题答案2、(1)3、栈有顺序栈和链栈两种存储结构。

江西理工大学数据结构考试大题,保过

江西理工大学数据结构考试大题,保过

1.掌握链表(包括单向、双向链表的插入和删除算法)2.给定二叉树的两种遍历序列,分别是:前序遍历序列:D,A,C,E,B,H,F,G,I;中序遍历序列:D,C,B,E,H,A,G,I,F,DAC FE GB H I3.试写出如图所示的二叉树分别按先序、中序、后序遍历时得到的结点序列。

(以及算法的实现)答:DLR:A B D F J G K C E H I L MLDR: B F J D G K A C H E L I MLRD:J F K G D B H L M I E C A4把如图所示的树转化成二叉树。

答:注意全部兄弟之间都要连线(包括度为2的兄弟),并注意原有连线结点一律归入左子树,新添连线结点一律归入右子树。

ABE CK F H DL G IM J5.画出和下列二叉树相应的森林。

答:注意根右边的子树肯定是森林,而孩子结点的右子树均为兄弟。

6.编写递归算法,计算二叉树中叶子结点的数目。

int LeafCount_BiTree(Bitree T)//求二叉树中叶子结点的数目{if(!T) return 0; //空树没有叶子else if(!T->lchild&&!T->rchild) return 1; //叶子结点else return Leaf_Count(T->lchild)+Leaf_Count(T->rchild);//左子树的叶子数加上右子树的叶子数}//LeafCount_BiTree7.编写算法判别给定二叉树是否为完全二叉树。

答:int IsFull_Bitree(Bitree T)//判断二叉树是否完全二叉树,是则返回1,否则返回0{InitQueue(Q);flag=0;EnQueue(Q,T); //建立工作队列while(!QueueEmpty(Q)){ { DeQueue(Q,p);if(!p) flag=1;else if(flag) return 0;else{ EnQueue(Q,p->lchild);EnQueue(Q,p->rchild); //不管孩子是否为空,都入队列}}//whilereturn 1;}//IsFull_Bitree8假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.17,0.09,0.02,0.06,0.32,0.13,0.11,0.10。

数据结构8

数据结构8

习题8 查找8.1 单项选择题1.顺序查找法适合于存储结构为____的线性表。

A. 散列存储B. 顺序存储或链接存储C. 压缩存储D. 索引存储2.对线性表进行二分查找时,要求线性表必须____。

A. 以顺序方式存储B. 以链接方式存储C. 以顺序方式存储,且结点按关键字有序排序D. 以链接方式存储,且结点按关键字有序排序3.采用顺序查找方法查找长度为n的线性表时,每个元素的平均查找长度为____.A. nB. n/2C. (n+1)/2D. (n-1)/24.采用二分查找方法查找长度为n的线性表时,每个元素的平均查找长度为____。

A.O(n2) B. O(nlog2n) C. O(n) D. O(log2n)5.二分查找和二叉排序树的时间性能____。

A. 相同B. 不相同6.有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当二分查找值82为的结点时,____次比较后查找成功。

A. 1B. 2C. 4D. 87.设哈希表长m=14,哈希函数H(key)=key%11。

表中已有4个结点:addr (15)=4; addr (38)=5; addr (61)=6; addr (84)=7如用二次探测再散列处理冲突,关键字为49的结点的地址是____。

A. 8B. 3C. 5D. 98.有一个长度为12的有序表,按二分查找法对该表进行查找,在表内各元素等概率情况下查找成功所需的平均比较次数为____。

A. 35/12B. 37/12C. 39/12D. 43/129.对于静态表的顺序查找法,若在表头设置岗哨,则正确的查找方式为。

A.从第0个元素往后查找该数据元素B.从第1个元素往后查找该数据元素C.从第n个元素往开始前查找该数据元素D.与查找顺序无关10.解决散列法中出现的冲突问题常采用的方法是。

A.数字分析法、除余法、平方取中法B.数字分析法、除余法、线性探测法C.数字分析法、线性探测法、多重散列法D.线性探测法、多重散列法、链地址法11.采用线性探测法解决冲突问题,所产生的一系列后继散列地址。

拓扑排序、关键路径、最短路、折半查找判定树、二叉排序树、平衡二叉树、Hash表答案

拓扑排序、关键路径、最短路、折半查找判定树、二叉排序树、平衡二叉树、Hash表答案

21 21 32813 38 44 44 4648 68 87 94
33
39
87
作业:
9.14 初始建成的B-树及删除50、68后的树分别如 下(少叶子结点):
注意:应该画上叶子结点,圆形、方形要区分!
作业:
9.19 Hash造表,求平均查找长度 写分数即可:17/8
1 36 9
4 7 10
ASL:2.9
作业:
31试写一个判别给定二叉树是否为二叉排序树的算 法,设此二叉树以二叉链表作存储结构。且树中结 点的关键字均不同。
存储结构定义:用BiTree的类型定义即可,不用定 义新类型BiSortedTree
思路:运用递归的思想.空树是二叉排序树;当树不 空时,先分别判断左右子树是否为二叉排序树,只 要有一个不是则原树不是二叉排序树。如果左右子 树都是二叉排序树,看看左子树中最大的是否比根 结点小,右子树中最小的是否比根结点大即可。
} //方法2:二叉排序树的中序遍历序列是递增的 //方法3:类似二叉树的中序线索化,引入引用型指针PRE,始终记录当前根节
点的前驱
补充作业1:45,32,16,77,94,38,44,21,39,68,33,87
32 43529
1362 3126
45 4757 4757
16 16
398 43589 6485 44 7974 9747 94
拓扑排序:可能不唯一,要会求所有的 关键路径+单源最短路:
很多同学抄答案,写法和讲的不同,要理解 Floyd算法最短路:
(1)注意与Dijstra算法的区分 (2)矩阵D和P均要给出,最好参照课件写法
作业:
3画出对ห้องสมุดไป่ตู้度为10的有序表进行折半查找的

【问题】苏州大学872考研试题1215

【问题】苏州大学872考研试题1215

【关键字】问题1、在任何需要数据反转的问题里,首先应考虑用来保存数据。

2、在顺序线性表下,根据位置position来进行元素的插入和删除,主要的时间花费在;在单链表下进行元素的插入和删除,主要时间花费在。

3、一个10×10的矩阵,如果以行为主序存入内存,则其容量为。

设a11是第一个元素,其保存地址为1,每元素占1个地址空间,则a85的地址为。

4、在线性表改进的单链表实现方法中,我们定义了一个current指针指向最近访问过的结点,定义的方法是:mutable Node<List_entry> *current;请解释这里mutable的作用:。

5、用二分查找方法进行查找,要求数据文件应为,且限于保存结构。

6、在哈希查找中,评判一个哈希函数优劣的两个主要指标是:______________ 和。

7、快速排序的最坏时间复杂度为;平均时间复杂度为。

8、图的遍历算法有两种:和。

9、由三个结点构成的二叉树,共有种不同的结构。

二、应用题(40分)1、设有n个无序记录的顺序表(每一条记录由一个对应的关键字),简述利用二叉查找树对此记录表进行树排序的方法。

(10分)2、队列采用顺序结构实现(linear implementation)时,随着元素的出队,数组开始处的空间不能再次利用。

如何解决这个问题?(10分)3、简述拓扑排序的实际意义,并写出下图的两个拓扑序列。

(10分)ADB I JHE LFKG4、简述堆排序的基本方法,并对键值集合,{72,73,71,23,94,16,05,68}对应的二叉树建大顶堆。

(10分)三、算法设计题(30分)1、设计一个递归算法,计算二叉树叶结点数目。

(10分)template <class Entry>int Binary_tree<Entry> :: recursive_leafcount(Binary_node<Entry> *sub_root) const2、以顺序保存结构实现两个有序表A、B的合并,合并结果放在A中。

画出对长度为10的有序表进行折半查找的判定树

画出对长度为10的有序表进行折半查找的判定树

1.画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成功的平均查找长度。

2. 在一棵空的二叉查找树中依次插入关键字序列为12,7,17,11,16,2,13,9,21,4,请画出所得到的二叉查找树。

3.已知如下所示长度为12的表:(Jan, Feb, Mar, Apr, May, June, July, Aug, Sep, Oct, Nov, Dec)(1)试按表中元素的顺序依次插入一棵初始为空的二叉排序树,画出插入完成之后的二叉排序树,并求其在等概率的情况下查找成功的平均查找长度。

(2)若对表中元素先进行排序构成有序表,求在等概率的情况下对此有序表进行折半查找时查找成功的平均查找长度。

(3)按表中元素顺序构造一棵平衡二叉排序树,并求其在等概率的情况下查找成功的平均查找长度。

4. 选取散列函数H(key)=(3*key)%11,用线性探测法处理冲突,对下列关键码序列构造一个散列地址空间为0~10,表长为11的散列表,{22,41,53,08,46,30,01,31,66}。

5.假定对有序表:(3,4,5,7,24,30,42,54,63,72,87,95)进行折半查找,试回答下列问题:(1)画出描述折半查找过程的判定树;(2)若查找元素54,需依次与哪些元素比较?(3)若查找元素90,需依次与哪些元素比较?(4)假定每个元素的查找概率相等,求查找成功时的平均查找长度。

6. 设哈希(Hash)表的地址范围为0~17,哈希函数为:H(K)=K MOD 16。

K为关键字,用线性探测法再散列法处理冲突,输入关键字序列:(10,24,32,17,31,30,46,47,40,63,49)造出Hash表,试回答下列问题:(1)画出哈希表的示意图;(2)若查找关键字63,需要依次与哪些关键字进行比较?(3)若查找关键字60,需要依次与哪些关键字比较?(4)假定每个关键字的查找概率相等,求查找成功时的平均查找长度。

数据结构_王翠茹_数据结构习题

数据结构_王翠茹_数据结构习题

数据结构_王翠茹_数据结构习题习题一1. 简述下列术语:数据、数据元素、数据对象、数据结构、逻辑结构、存储结构、基本运算、运算实现和数据类型。

2. 设有数据结构(D, R),其中D={d1,d2,d3,d4},R={r},r={ (d1, d2 ) , (d2, d3 ) , (d3, d4 ) }. 试按图论中图的画法惯例画出其逻辑结构图。

3. 函数f(M,n)按下式定义(m,n为≥0的整数):f (m,n)=﹛m+n+1 当m*n=0时f(m-1,(m,n-1))当m*n≠0 时(1)试写出计算该函数的递归过程;(2)写出递归过程转换成非递归过程的转换规则。

4. 把数组A[1…n]按递减顺序排序,并分析其最坏情况时间复杂性量级。

5. 为了用计算机实现学生档案管理, 需要经过哪些主要步骤?每个步骤的主要工作是什么?试用本章讲到的从“具体到抽象”、再“从抽象到具体”的观点加以分析。

6. 试设定若干n值,比较两函数n2和50nlog2n的增长趋势,并确定n在什么范围内,函数n2值大于50nlog2n 的值。

习题二1.设线性表存于a(1:n)的前elenum个分量中,且递增有序。

试写一算法,将X插入到线性表的适当位置上,以保持线性表的有序性。

2.写一个逆置线性表的算法。

即由A[1:n]产生B[1:n],使得B[1]=A[n],B[2]=A[n-1] , …B[n]=A[1]。

要求用最少的附加空间。

3.设有编号为1,2,3,4 的四辆列车,顺序进入一个栈式结构的站台,试写出这四辆列车开出车站的所有可能顺序。

4.设有六辆火车编号为1,2,3,4,5,6 利用栈,将它们重新编成3,2,5,6,4,1的顺序。

请写出操作序列,设X表示将一列火车从栈中开出;S表示将一列火车从输入端开入栈中。

5.假设栈中每个数据项占K个空间位置,试改写入栈和出栈的算法。

6.假设有两个栈如图所示共享空间 [1..m]。

试写一个对任一栈作入栈 push(s,x,i)和出栈pop (s,i )。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第九章 查找
作业:9.3 9.8 9.31 9.33
===============================================================================
◆9.3② 画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成 功的平均查找长度。

参考答案:
等概率查找时查找成功的平均查找长度为
ASL succ =(1*1+2*2+3*4+4*3)/10 =2.9
◆9.8③ 已知含12个关键字的有序表及其相应权值为:
(1)试按次优查找树的构造算法并加适当调整画出由这12个关键字构造所得的次 优查找树,并计算它的PH 值;
(2)画出对以上有序表进行折半查找的判定树,并计算它的PH 值。

参考答案:
(1) 次优查找树如下所示,其PH 值为133;
(2)
对BCD 调整后的次优查找树:其PH 值为134
对次优查找树的调整操作的分析(以下摘自刘文予老师回复邮件)
分析:
什么是次最优并没有一个严格的定义,与我们的实际工程的要求有关。

1. 调整是必须的,否则按书上算法9.3的构造方法构造的查找树离次最优有距离,但是,调整的工作量不能太大,否则,我们可以直接构造最优查找树(用次最优查找树是为了降低构造最优查找树的时间复杂度),显然调整的结果与最优查找树的误差精度与时间复杂度有关,精度越高,时间复杂度越大。

书上所说的“适当”比较模糊,没有统一的说法,根据实际的要求选择一个“适当”的调整标准。

2. 书上的参考答案是133,非唯一的标准答案,134也是可取的答案。

它是只对根结点进行调整,而书上的方法是对所有的子树的根结点进行调整,显然书上的方法精度更优,但是时间复杂度增大,具体,结果134的方法是O(log2n),书上的方法是O(n*log2n),但我们注意构造次最优查找树的时间复杂度是O(n*log2n),即我们对所有的子树的根结点进行调整不会增加构造算法的时间复杂度(会增加一些时间,如增加30%),说明对所有的子树的根结点进行调整是可行的。

需强调一点,两种方法都是正确的,没有标准的答案。

检验自己得到的PH值究竟是不是最小没有意义,最小是最优查找树,已证明不可能在O(n*log2n)的复杂度下构造出。

同理,精确的判知哪一步调整哪一步不调整也是没有意义的,我们已有最优的构造算法。

但是我们可以讨论几种常用的调整方法以及他们的特点。

3. 我的一些想法
a)数据结构中的一些问题没有标准答案,需要根据具体的要求进行设计,很多算法时间和空间复杂度是相互制约的,一个减小,另一个会增大,这就需要我们根据实际的情况进行综合设计和平衡。

这也是数据结构课程的特点。

b)算法的复杂度是非常重要的,否则,你不能得出正确的分析结果。

c)除了上面的2种调整方法,我还可以提出一种新的方法,把根结点与查找树中的最大PH值结点调整一次,他的时间复杂度是O(n),介于2种方法之间,他的精度是否在2者之间呢?你可以研究一下。

d)学生提的问题很好,如果不是已解答,可以作为考试题让他们分析,我们缺乏这类分析问题的题目!
◆9.31④试写一个判别给定二叉树是否为二叉排序树的算法,设此二叉树以二叉链表作存储结构。

且树中结点的关键字均不同。

分析:
注意仔细研究二叉排序树的定义。

易犯的典型错误是按下述思路进行判别:
“若一棵非空的二叉树其左、右子树均为二叉排序树,且左子树的根的值小于根结点的值,又根结点的值不大于右子树的根的值,则是二叉排序树。


假如你准备写递归形式的算法,则建议你采用如下所述的函数首部,
bool BiSortTree(BiTree T, BiTree &PRE)
其中PRE为指向当前访问结点的前驱的指针。

参考程序:
int flag=1, last=NULL;
int Is_BSTree(Bitree T)//判断二叉树T是否二叉排序树,是则返回1,否则返回0 {
if(T->lchild&&flag) Is_BSTree(T->lchild);
if((T->data<last)||(!last)) flag=0; //与其中序前驱相比较
last=T->data;
if(T->rchild&&flag) Is_BSTree(T->rchild);
return flag;
}//Is_BSTree
◆9.33③编写递归算法,从大到小输出给定二叉排序树中所有关键字不小于x的数
n+m),其中n为排序树中所含结点数,m 据元素。

要求你的算法的时间复杂度为O(log
2
为输出的关键字个数。

分析:
为满足题目所要求的时间复杂度,算法中应注意做到,一旦访问到关键字小于
x的结点,立即结束遍历。

参考程序:
void Print_NLT(BiTree T,int x)//从大到小输出二叉排序树T中所有不小于x的元素{
if(T->rchild) Print_NLT(T->rchild,x);
if(T->data<x) exit(); //当遇到小于x的元素时立即结束运行
printf("%d\n",T->data);
if(T->lchild) Print_NLT(T->lchild,x); //先右后左的中序遍历
}//Print_NLT。

相关文档
最新文档