清华大学出版社《数据结构》唐国民DS08-查找

合集下载

数据结构(C语言版清华大学出版社)-章课后部分答案

数据结构(C语言版清华大学出版社)-章课后部分答案

第八章选择题1. C2.A3.B4.C5.D6.B7.B8.A9.D 10.D 11.C 12.C填空题1.n、n+12. 43.8.25( 折半查找所在块 )4.左子树、右子树5.266.顺序、(n+1)/2、O(log2n)7.m-1、[m/2]-18.直接定址应用题1.进行折半查找时,判定树是唯一的,折半查找过程是走了一条从根节点到末端节点的路径,所以其最大查找长度为判定树深度[log2n]+1.其平均查找长度约为[log2n+1]-1.在二叉排序树上查找时,其最大查找长度也是与二叉树的深度相关,但是含有n个节点的二叉排序树不是唯一的,当对n个元素的有序序列构造一棵二叉排序树时,得到的二叉排序树的深度也为n,在该二叉树上查找就演变成顺序查找,此时的最大查找长度为n;在随机情况下二叉排序树的平均查找长度为1+4log2n。

因此就查找效率而言,二分查找的效率优于二叉排序树查找,但是二叉排序树便于插入和删除,在该方面性能更优。

3. 评价哈希函数优劣的因素有:能否将关键字均匀的映射到哈希表中,有无好的处理冲突的方法,哈希函数的计算是否简单等。

冲突的概念:若两个不同的关键字Ki和Kj,其对应的哈希地址Hash(Ki) =Hash(Kj),则称为地址冲突,称Ki和K,j为同义词。

(1)开放定址法(2)重哈希法(3)链接地址法4.(1)构造的二叉排序树,如图(2)中序遍历结果如下:10 12 15 20 24 28 30 35 46 50 55 68(4)平均查找长度如下:ASLsucc = (1x1+2x2+3x3+4x3+5x3)/12 = 41/128.哈希地址如下:H(35) = 35%11 = 2H(67) = 67%11 = 1H(42) = 42%11 = 9H(21) = 21%11 = 10H(29) = 29%11 = 7H(86) = 86%11 = 9H(95) = 95%11 = 7H(47) = 47%11 = 3H(50) = 50%11 = 6H(36) = 36%11 = 3H(91) = 91%11 = 3第九章选择题1. D2.C3.B4.D5.C6.B7.A8.A9.D 10.D填空题1.插入排序、交换排序、选择排序、归并排序2.移动(或者交换)3.归并排序、快速排序、堆排序4.保存当前要插入的记录,可以省去在查找插入位置时的对是否出界的判断5.O(n)、O(log2n)6.直接插入排序或者改进了的冒泡排序、快速排序7.Log2n、n8.完全二叉树、n/29.1510.{12 38 25 35 50 74 63 90}应用题11.(1)Shell排序(步长为5 3 1)每趟的排序结果初始序列为100 87 52 61 27 170 37 45 61 118 14 88 32步长为5的排序14 37 32 61 27 100 87 45 61 118 170 88 52步长为3的排序结果14 27 32 52 37 61 61 45 88 87 170 100 118步长为1的排序结果14 27 32 37 45 52 61 61 87 88 100 118最后结果14 27 32 37 45 52 61 61 87 88 100 118 170(2)快速排序每趟的排序结果如图初始序列100 87 52 61 27 170 37 45 61 118 14 88 32第一趟排序[32 87 52 61 27 88 37 45 61 14]100[118 170]第二趟排序[14 27]32[61 52 88 37 45 61 87]100 118[170]第三趟排序14[27]32[45 52 37]61[88 61 87]100 118[170]第四趟排序14[27]32[37]45[52]61[87 61]88 100 118[170]第五趟排序14[27]32[37]45[52]61[87 61]88 100 118[170]最后结果14[27]32[37]45[52]61[61]87 88 100 118[170](3)二路归并排序每趟的排序结果初始序列[100][87][52][61][27][170][37][45][61][118][14][88][32]第一趟归并[87 100][52 61][27 170][37 45][61 118][14 88][32]第二趟归并[52 61 87 100][27 37 45 170][14 61 88 118][32]第三趟归并排序[27 37 45 52 61 87 100 170][14 32 61 88 118]第四趟归并排序[14 27 32 37 45 52 61 61 87 88 100 118 170]最后结果14 27 32 37 45 52 61 61 87 88 100 118 17012.采用快速排序时,第一趟排序过程中的数据移动如图:算法设计题1.分析:为讨论方便,待排序记录的定义为(后面各算法都采用此定义):#define MAXSIZE 100 /* 顺序表的最大长度,假定顺序表的长度为100 */ typedef int KeyType; /* 假定关键字类型为整数类型 */typedef struct {KeyType key; /* 关键字项 */OtherType other; /* 其他项 */}DataType; /* 数据元素类型 */typedef struct {DataType R[MAXSIZE+1]; /* R[0]闲置或者充当哨站 */int length; /* 顺序表长度 */}sqList; /* 顺序表类型 */设n个整数存储在R[1..n]中,因为前n-2个元素有序,若采用直接插入算法,共要比较和移动n-2次,如果最后两个元素做一个批处理,那么比较次数和移动次数将大大减小。

数据结构知识点整理(清华大学出版社)

数据结构知识点整理(清华大学出版社)
链式存储结构:关系采取链式映像表示,即借助附加信息指针显式表示元素间的关系,对应一个链表。优点是更有效利用空间、插入或者删除结点快,但要顺序访问各元素。
5.度量指标:算法运行时间主要取决于基本操作的执行次数(频度),执行次数通常随问题规模扩大而增加,增加越快意味着算法随问题规模的扩大,运行时间增长的也快,从而该种算法效果较差;增长越慢算法越好,故可用基本操作的频度随问题规模的增长率反映算法的效率。
{//在顺序表L的第i个位置前插入元素e,i的合法值为1..L.length+1
if(i<1||i>L.length+1) return ERROR;//插入不合法
if(L.length>=L.listsize)
{//表满,增加存储容量
ElemType*newbase=(ElemType*)realloc
#define LISTINCREMENT 10 //…
typedef ***** ElemType;
typedef struct{
ElemType *elem; //存储空间基址
int length; //…
int listsize; //……
}SqList;
SqList La,Lb,Lc;
Status InitList_Sq(SqList &L)
return(OK);
}//InitList_Sq
void ListDelete(SqList &L,int i,ElemType &e)
{//在顺序表L中删除第i个元素,用e返回其值.
//i的合法值是[1,ListLength(L)]
if(i<1||i>L.length) retuΒιβλιοθήκη n ERROR;//删除位置不合理

数据结构(C语言版)第三版__清华大学出版社_习题参考答案

数据结构(C语言版)第三版__清华大学出版社_习题参考答案

附录习题参考答案习题1参考答案1.1.选择题(1). A. (2). A. (3). A. (4). B.,C. (5). A. (6). A. (7). C. (8). A. (9). B. (10.)A.1.2.填空题(1). 数据关系(2). 逻辑结构物理结构(3). 线性数据结构树型结构图结构(4). 顺序存储链式存储索引存储散列表(Hash)存储(5). 变量的取值范围操作的类别(6). 数据元素间的逻辑关系数据元素存储方式或者数据元素的物理关系(7). 关系网状结构树结构(8). 空间复杂度和时间复杂度(9). 空间时间(10). Ο(n)1.3 名词解释如下:数据:数据是信息的载体,是计算机程序加工和处理的对象,包括数值数据和非数值数据。

数据项:数据项指不可分割的、具有独立意义的最小数据单位,数据项有时也称为字段或域。

数据元素:数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理,一个数据元素可由若干个数据项组成。

数据逻辑结构:数据的逻辑结构就是指数据元素间的关系。

数据存储结构:数据的物理结构表示数据元素的存储方式或者数据元素的物理关系。

数据类型:是指变量的取值范围和所能够进行的操作的总和。

算法:是对特定问题求解步骤的一种描述,是指令的有限序列。

1.4 语句的时间复杂度为:(1) Ο(n2)(2) Ο(n2)(3) Ο(n2)(4) Ο(n-1)(5) Ο(n3)1.5 参考程序:main(){int X,Y,Z;scanf(“%d, %d, %d”,&X,&Y,Z);if (X>=Y)if(X>=Z)if (Y>=Z){ printf(“%d, %d, %d”,X,Y,Z);}else{ printf(“%d, %d, %d”,X,Z,Y);}else{ printf(“%d, %d, %d”,Z,X,Y);}elseif(Z>=X)if (Y>=Z){ printf(“%d, %d, %d”,Y,Z,X);}else{ printf(“%d, %d, %d”,Z,Y,X);}else{ printf(“%d, %d, %d”,Y,X,Z);}}1.6 参考程序:main(){int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;i<=n;i++)scanf(“%f ”,&a[i]);p=a[0];for(i=1;i<=n;i++){ p=p+a[i]*x;x=x*x;}printf(“%f”,p)’}习题2参考答案2.1选择题(1). C. (2). B. (3). B. (4). B. 5. D. 6. B. 7. B. 8. A. 9. A. 10. D.2.2.填空题(1). 有限序列(2). 顺序存储和链式存储(3). O(n) O(n)(4). n-i+1 n-i(5). 链式(6). 数据指针(7). 前驱后继(8). Ο(1) Ο(n)(9). s->next=p->next; p->next=s ;(10). s->next2.3. 解题思路:将顺序表A中的元素输入数组a,若数组a中元素个数为n,将下标为0,1,2,…,(n-1)/2的元素依次与下标为n,n-1,…, (n-1)/2的元素交换,输出数组a的元素。

清华大学数据结构试题及答案

清华大学数据结构试题及答案

清华大学数据结构试题及答案以下是清华大学数据结构试题及答案:试题一:1. 请解释什么是数据结构。

答案:数据结构是计算机科学中研究数据的组织、存储和管理方式的学科。

它涉及到数据的表示、操作以及与之相关的算法的设计和实现。

2. 请列举常见的数据结构类型。

答案:常见的数据结构类型包括数组、链表、栈、队列、树、图等。

3. 请解释什么是算法。

答案:算法是一系列解决特定问题的指令和计算步骤。

它描述了在给定输入的情况下,如何进行计算并产生所需输出。

4. 请列举一些常见的算法。

答案:常见的算法包括排序算法(如冒泡排序、插入排序、快速排序)、查找算法(如二分查找、哈希查找)、图算法(如深度优先搜索、广度优先搜索)等。

5. 请解释什么是时间复杂度和空间复杂度。

答案:时间复杂度是描述算法执行时间与输入规模之间的关系。

空间复杂度是描述算法所需内存空间与输入规模之间的关系。

试题二:1. 请给出数组和链表的区别。

答案:数组是一块连续的内存空间,元素在内存中按照索引顺序排列。

链表是由节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。

2. 请解释什么是栈和队列。

答案:栈是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。

队列是一种先进先出(FIFO)的数据结构,允许在队尾插入数据,在队头删除数据。

3. 请给出树和图的区别。

答案:树是一种由节点和边组成的数据结构,每个节点可以有多个子节点。

图是一种由节点和边组成的数据结构,节点之间的关系可以是任意的,包括有向和无向边。

4. 请解释什么是哈希表。

答案:哈希表是一种通过哈希函数将键映射到特定位置的数据结构。

它能够快速地进行插入、删除和查找操作。

5. 请解释什么是递归。

答案:递归是一种通过调用自身的方法或函数来解决问题的编程技巧。

在递归过程中,问题会被拆分成一个或多个规模较小的子问题,直到达到基本情况。

以上就是清华大学数据结构试题及答案,希望对您有所帮助。

清华大学本科计算机课程介绍

清华大学本科计算机课程介绍
本科生课程介绍
课号:00240013 学分: 3 课程名称 中文 课程属性:全校任选 英文 开课学期:秋、春 Fundamentals of Computer-aided Design 出版社 清华大学出版社 出版年月 2002 年 8 月
计算机辅助设计技术基础 书名 作者
使用教材
计算机辅助设计技术基 础教程
本课程是计算机科学与技术系为全校本科生开设的一门重要的计算机专业基础 课,目的是培养学生的软件工程素质,提高学生的软件开发能力。 本课程以软件生命周期的主要活动为主线,从软件及软件工程的历史和发展、软 件开发过程、需求分析、软件设计、程序编码、软件测试、软件维护、软件项目管理、 标准及规范等方面全面介绍软件工程的基本理论、方法、技术和工具。
课号: 30240273 课程名称
学分: 3 中文
课程属性:本科必修 开课学期: 春季 数据结构 书名 作者 英文 Data Structure 出版社 出版年月 1997
使用教材 参考书 讲课对象 课 程 简 介
数据结构(C 语言版)
严蔚敏,吴伟民 清华大学出版社
[1] Kruse, et.al. Data Structures & Program Desing in C. [2] Knuth. The Art of Computer Programming. Volume 1. 本科生 适用专业 工业工程系 先修课 C 语言程序设计
This course focuses on the basic concepts, principles, algorithms and applications of computer-aided design(CAD), it mainly consists of the following topics: software and hardware system of CAD, two-dimensional transformations, line clipping, raster display of 2D graphics, curves Introduction and surfaces, solid modeling, three-dimensional transformations, three-dimensional viewing, visible-surface determination, basic illumination models, and introductions to AutoCAD, 3DMAX 5.0 and OpenGL. It is an ideal choice for students who want to learn the rudiments of this dynamic and exciting CAD technology. 姓 名 讲 课 教 师 职称 主要教学和科研领域 主要教学领域: (1)承担全校计算机辅助设计技术基础 课教学; (2)承担研究生的小波分析及其应用课教学; 主要研究领域:小波分析及其应用,科学计算可视化, 计算机图形学,几何造型和图象处理。 (1)承担全校计算机辅助设计技术基础课教学

数据结构(C语言版)第三版__清华大学出版社_习题参考答案

数据结构(C语言版)第三版__清华大学出版社_习题参考答案

数据结构(C语言版)第三版__清华大学出版社_习题参考答案数据结构(C语言版)第三版__清华大学出版社_习题参考答案引言:数据结构是计算机科学的基础,对于学习和理解数据结构的相关概念和算法非常重要。

本文将对清华大学出版社出版的《数据结构(C语言版)第三版》中的习题进行参考答案的提供。

通过正确的理解和掌握这些习题的解答,读者可以加深对数据结构的认识,并提高自己的编程能力。

第一章:绪论1.1 数据结构的定义与作用数据结构是指数据对象以及数据对象之间的关系、运算和存储结构的总称。

数据结构的作用是在计算机中高效地组织和存储数据,同时支持常见的数据操作和算法。

1.2 算法的定义与特性算法是解决特定问题的一系列步骤和规则。

算法具有确定性、有穷性、可行性和输入输出性等特点。

第二章:线性表2.1 线性表的定义和基本操作线性表是同类型数据元素的一个有限序列。

线性表的基本操作包括初始化、查找、插入、删除和遍历等。

2.2 顺序存储结构顺序存储结构是将线性表中的元素按顺序存放在一块连续的存储空间中。

顺序存储结构的特点是随机存取、插入和删除操作需要移动大量元素。

2.3 链式存储结构链式存储结构通过结点之间的指针链表来表示线性表。

链式存储结构的特点是插入和删除操作方便,但查找操作需要遍历整个链表。

第三章:栈和队列3.1 栈的定义和基本操作栈是只能在一端进行插入和删除操作的线性表。

栈的基本操作包括初始化、入栈、出栈和获取栈顶元素等。

3.2 队列的定义和基本操作队列是只能在一端插入操作,在另一端进行删除操作的线性表。

队列的基本操作包括初始化、入队、出队和获取队头元素等。

第四章:串4.1 串的定义和基本操作串是由零个或多个字符组成的有限序列。

串的基本操作包括初始化、串的赋值、串的连接和串的比较等。

第五章:树5.1 树的基本概念和术语树是n(n>=0)个结点的有限集。

树的基本概念包括根结点、子树、深度和高度等。

5.2 二叉树二叉树是每个结点最多有两个子树的树结构。

数据结构(C语言版)(第3版)

数据结构(C语言版)(第3版)

推荐
《数据结构(C语言版第3版)》特点: (1).结构合理、内容紧凑、知识连贯、逻辑性强,并且配有学习与实验指导书,便于学生学习和实践。 (2).所有算法都用C语言函数实现,并在TurboC2.0系统下通过调试,无须修改就可被其他函数调用,避免 了使用伪算法给学生学习带来的不便。 (3).例题经典且配有精选的大量习题,既可以使学生快速掌握所学的知识,又能培养学生的应用和创新能 力。 (4).电子教案及程序源代码可在清华大学出版社网站下载。 层次分明,结构严谨,语言简炼,图文并茂。 全部算法都用C语言编写,并在TurboC下调试通过,算法描述简捷易懂。 适合作为计算机及相关专业的教材,也可作为自学或各种计算机培训班的教材。
数据结构(C语言版)(第3版)
2015年清华大学出版社出版的图书
01 内容简介
03 作者简介
目录
02 推荐 04 图书目录 Nhomakorabea《数据结构(C语言版)(第3版)》是2015年8月1日清华大学出版社出版的图书,作者是秦玉平、马靖善。
内容简介
数据结构是计算机及其相关专业的核心课程,是计算机程序设计的基础,也是程序员考试和许多高校研究生 入学考试的必考科目。全书共10章。第1章是数据结构的概述;第2~10章分别讨论了顺序表、链表、栈、队列、 串、数组、广义表、树、二叉树、图、查找、内部排序、外部排序和文件等基本类型的数据结构。本书中的算法 都已经过调试,不必修改就能在Turbo C 2.0系统下正常运行。本书可作为计算机及相关专业的教材,也可作为 自学或各种计算机培训班的教材。
作者简介
秦玉平教授,计算机专业博士,辽宁省教学名师,硕士生导师,多年从事计算机算法与程序设计类课程的教 学与研究。
马靖善教授,计算机专业硕士,多年从事计算机教学管理工作和算法与程序设计类课程的教学与研究。

数据结构(C语言版上)清华大学出版社ppt

数据结构(C语言版上)清华大学出版社ppt
以链式结构存储的线性表称之为以链式结构存储的线性表称之为linkedlistlinkedlist70存储地址数据域指针域15头指针h15null20141413132727线性表王李钱线性表王李钱表示意图表示意图71存放数据元素的结点至少包含两个域数据域和指针域数据域存放元素的数据指针域存放其后继元素的存储地址指针域中存放的信息称为指针或链n个结点连接成一个链表称为线性表的链式存储结构73typedeftypedefstructstructlnodelnodeelemtypeelemtypedatadata数据域数据域structstructlnodelnodenextnext
—— C语言版
清华大学出版社
2009年9月
第1章 概 论
o 什么是数据结构 o 为什么要学习数据结构 o 算法和算法分析
1.1 什么是数据结构
1.1.1 数据和数据元素
数据(data)是信息的载体,是对客观事物的符 号表示,它能够被计算机识别、存储和加工处理。
数据——在计算机科学中指所有能输入到计算机中并被计 算机程序处理的符号的总称。如图像、数、字符、声音、 视频等都可以通过编码而由计算机处理,因此它们也属于 数据的范畴。
一般,我们把算法运行的时间定义 成函数T(n),一个算法所耗费的时间 将随输入数据量n的增大而增大,n是 该算法输入数据的规模,这个数据规 模不是某一个具体的输入。T(n)的单 位是不确定的,一般把它看成是在一 个特定的计算机上执行的指令条数。
当讨论一个程序的运行时间 T(n)时, 注重的不是T(n)的具体值,而是它的增长 率。即求出T(n)随输入数据量n而增长的 趋势(极限) 。
通常有如下的函数关系排序: c< log2 n< n< n log2 n< n2< n3< 10 n
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

≈ log2(n)
当n很大时
第八 章


二分查找的平均查找长度


二分查找成功时的平均查找长度 为: ASLbn≈log2(n) 二分查找在查找失败时所需比较的关 键字个数不超过判定树的深度,在最 坏情况下查找成功的比较次数也不超 过判定树的深度。即为:
lg(n 1)
第八 章


二分查找的优点和缺点
(叶子)
第八 章


二叉排序树的存储结构
typedef int KeyType; typedef struct node { KeyType key; /*关键字类型*/ infoType otherinfo; /*结点其它信息类型*/ struct node *lchild,*rchild; } BSTNode; /*二叉排序树的结点类型*/ typedef BSTNode *BSTree;
ID
22 1 48 7 86 13
块内最大键值 块内第一个元素序号
22
12
13
8
9
20
33
42
44
38
24
48
60
58
74
49
86
53
第八 章


进行下列查找:
(1)先在索引表中查找,来确定关键字等于给定值K=24的 结点所在的块 因为索引表小,不妨用顺序查找方法查找索引表。即首 先将K依次和索引表中各关键字比较,直到找到第1个关 键字大小等于K的结点,由于K<48,所以关键字为24的 结点若存在的话,则必定在第二块中;然后,由 ID[2].addr找到第二块的起始地址7,从该地址开始在 R[7..12]中进行顺序查找,直到R[11].key=K为止。 (2)在所确定的块内查找关键字等于给定值K=30的结点 在第二块内查找。因在该块中查找不成功,故说明表中 不存在关键字为30的结点。
第八 章


二叉排序树的特点
(1) 二叉排序树中任一结点x,其左(右) 子树中任一结点y(若存在)的关键字必 小(大)于x的关键字。 (2) 二叉排序树中,各结点关键字是惟 一的。 (3) 按中序遍历该树所得到的中序序列 是一个递增有序序列。
第八 章


二叉排序树的查找算法:
要查找键值等于k的记录,最先与 根结点的键值比较,若二者相等,则 查找成功 。若k值小于根结点的键值, 则继续查找左子树,反之查找右子树 。若沿某条路经碰到一个端点 还末 查到,则查找不成功,这也是静态表 的查找。
查找
第八 章


如何分析算法优劣?主要分析算 法运算时所需要的时间和其存储结构 占用的内存空间。而对于查找算法, 执行的时间通常取决于关键字的比较 次数,所以本章经常用平均比较次数, 即平均查找长度 ASL(Average Search Length)
第八 章


平均查找长度 ASL(Average Search Length) 定义为 : ASL=
第八 章


二、二分查找


二分查找又称折半查找,它是一种效率较高的查 找方法。 二分查找要求:要求线性表是有序表,即表中结 点按关键字有序,并且要用向量作为表的存储结 构。不妨设有序表是递增有序的。
第八 章


二分查找的基本思想是: (1)首先确定该区间的中点位置
mid = (low high)/2
lchild key otherinfo rchild
第八 章


二叉排序树插入新结点的过程
在二叉排序树中插入新结点,要保证插入后仍满足 BST性质。其插入过程是: 1)若二叉排序树T为空,则为待插入的关键字key 申请一个新结点,并令其为根; 2)若二叉排序树T不为空,则将key和根的关键字 比较: (a)若二者相等,则说明树中已有此关键字key,无 须插入。 (b)若key<T→key,则将key插入根的左子树中。 (c)若key>T→key,则将它插入根的右子树中。
/*多出0号单元用作监视哨*/
第八 章


具体算法 int SeqSearch(Seqlist R,KeyType K) { /*在顺序表R[1..n]中顺序查找关键字为K的结点,*/
/*成功时返回找到的结点位置,失败时返回0*/
int i; R[0].key=K; /*设置监视哨*/ for(i=n;R[i].key!=K;i--);/*从表后往前找*/ return i; /*若i为0,表示查找失败,否则R[i]为要找的结点*/ } /*SeqSearch*/
第八 章


分块查找的优点
①在表中插入或删除一个记录时, 只要找到该记录所属的块,就在该 块内进行插入和删除运算。 ②因块内记录的存放是任意的,所 以插入或删除比较容易,无须移动 大量记录。
第八 章


8.3 树表的查找
1、二叉排序树的定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜 索)树(Binary Search Tree)。其定义为:二叉排 序树或者是空树,或者是满足如下性质的二叉树: (1)若它的左子树非空,则左子树上所有结点的值 均小于根结点的值; (2)若它的右子树非空,则右子树上所有结点的值 均大于根结点的值; (3)左、右子树本身又各是一棵二叉排序树。
第八 章


算法分析
查找成功时的顺序查找的平均查找长度: 在等概率情况下,pi=1/n(1≤i≤n),故成功 的平均查找长度为 ASL= pici#43;1)/n=(n+1)/2
即查找成功时的平均比较次数约为表长的一半。
第八 章


顺序查找的优点 算法简单,且对表的结构无任何要求,无 论是用向量还是用链表来存放结点,也无 论结点之间是否按关键字有序,它都同样 适用。 顺序查找的缺点 查找效率低。
如对表R{3,7,11,19,30,115,136,141}的查找过程:
3
Low
7
11
19
mid
30
115
136
141
high
3
7
4 2
11
19
30
Low
115
mid
136
141
high
6 3 5 7 8
1
第八 章


如k=115的记录结点编号为6,处于第二层,则比 较次数只有两次就可找到(这样的记录共有两个21=2) ;查找第三层的记录需要三次比较(这样的记录共有四 个22=4 );查找第k层的记录需要k次比较(这样的记 录共有2k-1个);等等。假定每个记录的查找概率相等, 即为1/n,则其平均查找次数为:
ASL= pici=1/n cpiici
i 1 i 1
n
n
=1/n(1*20+2*21+3*22+…+k*2k-1+……)
pici pici = 1/n i*2i-1 ; 而 i*2i-1 =k2k-2k-1
i 1
i 1
n
k n
又根据二叉树的性质:k=log2(n+1) 故: ASL=[(n+1)/n]log2(n+1)-1
虽然二分查找的效率高,但是要 将表按关键字排序(有序表)。 二分查找只适用顺序存储结构。 为保持表的有序性,在顺序结构里 插入和删除都必须移动大量的结点。
第八 章


三、分块查找(索引顺序查找 )
分块查找表存储结构 分块查找的特点是:按表内记录的某种 属性把表(文件)分成b个块(子表), 并建立一个相应的“索引表”,索引表 中每个元素对应一个块,而在索引表中 是按其关键字有序,但是每一块中的记 录的存放是任意的,块与块之间必须是 有序的。即分块查找的前提是:文件由" 分块有序"的线性表和索引表组成。
pc
i 1
n
i i
其中: 1、n是结点的个数; 2、Pi是查找第i个结点的概率。若不特别声明 ,认为每个结点的查找概率相等,即 pl = p2…… = pn = 1/n 3、ci是找到第i个结点所需进行的比较次数
第八 章


8.2 线性表的查找
一、顺序查找(Sequential Search)
基本思想是:从表的一端开始,顺序 扫描线性表,依次将扫描到的结点关 键字和给定值K相比较。若当前扫描到 的结点关键字与K相等,则查找成功; 若扫描结束后,仍未找到关键字等于K 的结点,则查找失败。
第八 章


基于顺序结构的顺序查找算法
类型说明 typedef struct{ KeyType key; /*KeyType由用户定义*/ InfoType otherinfo; /*此类型依赖于应用*/ }NodeType; typedef NodeType Seqlist[n+1];
第八 章


算法分析
分块查找是两次查找过程。整个查找过程 的平均查找长度是两次查找的平均查找长 度之和。 以二分查找来确定块,分块查找成功时 的平均查找长度(在索引表中用二分查找,在块内用顺序查找) ASLblk= ASLbn+ASLsq≈log2(b+1)1+(s+1)/2≈log2(n/s+1)+s/2 以顺序查找确定块,分块查找成功时的 平均查找长度 ASL’blk=(b+1)/2+(s+1)/2=(s2+2s+n)/(2s)
第八 章


第八章
查找
基本概念 线性表的查找 树表的查找 散列(Hash)技术
相关文档
最新文档