[工学]数据结构第17次课-查找C课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《[工学]数据结构第17次课-查找C课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学 数据结构 17 查找 课件
- 资源描述:
-
1、数据结构计算机与信息学院 姜敏 第1页 1.上机实现顺序查找的改进算法。上机实现顺序查找的改进算法。2.上机实现折半查找的递归及非递归算法。上机实现折半查找的递归及非递归算法。选做:选做:3.设计一个算法,利用折半查找算法在一个设计一个算法,利用折半查找算法在一个 有序表中插入一个元素有序表中插入一个元素x,并保持表的有序,并保持表的有序 性,上机实现。性,上机实现。实验三实验三数据结构计算机与信息学院 姜敏 第2页针对静态查找表的查找算法主要有:针对静态查找表的查找算法主要有:8.2 8.2 静态查找表静态查找表一、一、顺序查找(线性查找)顺序查找(线性查找)二、二、折半查找(二分或对分查找
2、)折半查找(二分或对分查找)三、静态树表的查找三、静态树表的查找四、四、分块查找(索引顺序查找)分块查找(索引顺序查找)上节课内容回顾数据结构计算机与信息学院 姜敏 第3页一、顺序查找(一、顺序查找(Linear searchLinear search,又称线性查找又称线性查找 )顺序查找:即用逐一比较的办法顺序查找关键字,这显然是最顺序查找:即用逐一比较的办法顺序查找关键字,这显然是最直接的办法。直接的办法。v对对顺序结构顺序结构如何线性查找?如何线性查找?挨个比较挨个比较v对对单链表结构单链表结构如何线性查找?函数虽未给出,但也很容易编如何线性查找?函数虽未给出,但也很容易编写;只要知道头
3、指针写;只要知道头指针headhead就可以就可以“顺藤摸瓜顺藤摸瓜”;v对对非线性树结构非线性树结构如何顺序查找如何顺序查找?可借助各种可借助各种遍历遍历操作!操作!优点:优点:算法简单,且对顺序结构或链表结构均适用。算法简单,且对顺序结构或链表结构均适用。缺点:缺点:ASL(n+1)/2,ASL太大,时间效率太低。太大,时间效率太低。顺序查找的特点:顺序查找的特点:数据结构计算机与信息学院 姜敏 第4页二、折半查找(又称二分查找或对分查找)二、折半查找(又称二分查找或对分查找)先给数据排序先给数据排序(例如按升序排好),形成(例如按升序排好),形成有序表有序表,然后再将,然后再将keyke
4、y与正中元素相比,若与正中元素相比,若keykey小,则缩小至右半部内查找;再取其小,则缩小至右半部内查找;再取其中值比较,每次缩小中值比较,每次缩小1/21/2的范围,直到查找成功或失败为止。的范围,直到查找成功或失败为止。low=1;high=length;/设置初始区间 当lowhigh时,返回查找失败信息 /表空,查找失败 lowhigh,mid=(low+high)/2;/取中点 a.若kxelemmid.key,low=mid+1;转 /查找在右半区进行 c.若kx=elemmid.key,返回数据元素在表中位置 /查找成功 数据结构计算机与信息学院 姜敏 第5页四、分块查找(索引
5、顺序查找)四、分块查找(索引顺序查找)这是一种顺序查找的另一种改进方法。这是一种顺序查找的另一种改进方法。先让数据先让数据分块有序分块有序,即分成若干子表,要求每个子表中的,即分成若干子表,要求每个子表中的数值(用关键字更准确)都比后一块中数值小(但子表内部未数值(用关键字更准确)都比后一块中数值小(但子表内部未必有序)。必有序)。然后将各子表中的最大关键字构成一个然后将各子表中的最大关键字构成一个索引表索引表,表中还要,表中还要包含每个子表的起始地址(即头指针)。包含每个子表的起始地址(即头指针)。索引表索引表最大关键字起始地址22 12 138920 33 42 44 38 24 48 6
6、0 58 74 49 86 53第第1 1块块第第2 2块块第第3 3块块224886例:例:2248861713特点:块间有特点:块间有序,块内无序序,块内无序数据结构计算机与信息学院 姜敏 第6页查找步骤查找步骤分两步进行:分两步进行:对索引表使用折半查找法(因为索引表是有序表);对索引表使用折半查找法(因为索引表是有序表);确定了待查关键字所在的子表后,在子表内采用顺序确定了待查关键字所在的子表后,在子表内采用顺序查找法(因为各子表内部是无序表);查找法(因为各子表内部是无序表);查找效率:查找效率:ASL=LASL=Lb b+L+Lw w对索引表查找的对索引表查找的ASL对块内查找的对
7、块内查找的ASL)21(log2)1(log22nASLnssnASLbsbsS为每块内部的记录个数,为每块内部的记录个数,n/s即块的数目即块的数目例如当例如当n=9n=9,s=3s=3时时,ASLASLbsbs=3.53.5,而折半法为而折半法为3.13.1,顺序法为顺序法为5 5数据结构计算机与信息学院 姜敏 第7页ASL最大最大最小最小两者之间两者之间表结构表结构有序表、无序表有序表、无序表 有序表有序表分块有序表分块有序表存储结构存储结构顺序存储结构顺序存储结构线性链表线性链表顺序存储结构顺序存储结构 顺序存储结构顺序存储结构线性链表线性链表三种静态查找方法比较三种静态查找方法比较顺
8、序查找顺序查找折半查找折半查找分块查找分块查找小结小结:数据结构计算机与信息学院 姜敏 第8页针对动态查找表的查找算法主要有:针对动态查找表的查找算法主要有:8.3 8.3 动态查找表动态查找表一、二叉排序树(一、二叉排序树(BST)二、平衡二叉树(二、平衡二叉树(AVL树)树)三、三、B-、B+树树数据结构计算机与信息学院 姜敏 第9页1 1、二叉排序树的定义回顾、二叉排序树的定义回顾-或是一棵空树;或者是具有如下性质的非空二叉树:或是一棵空树;或者是具有如下性质的非空二叉树:(1 1)左左子树的所有结点均子树的所有结点均小小于根的值;于根的值;(2 2)右右子树的所有结点均子树的所有结点均
9、大大于根的值;于根的值;(3 3)它的左右子树也分别为二叉排序树。)它的左右子树也分别为二叉排序树。递归定义递归定义 (4 4)其中序遍历序列为一个递增序列其中序遍历序列为一个递增序列 一一.二叉排序树搜索二叉排序树搜索数据结构计算机与信息学院 姜敏 第10页2 2、二叉排序树的插入与删除、二叉排序树的插入与删除将数据元素构造成二叉排序树的优点:将数据元素构造成二叉排序树的优点:查找过程与顺序结构有序表中的查找过程与顺序结构有序表中的折半查找折半查找相似,查找效率高;相似,查找效率高;如果查找不成功,能够方便地将被查元素如果查找不成功,能够方便地将被查元素插入到二叉树的叶子插入到二叉树的叶子结
10、点结点上,而且插入或删除时只需修改指针而不需移动元素。上,而且插入或删除时只需修改指针而不需移动元素。注:注:若若数据元素的数据元素的输入顺序不同,则得到的二叉排序树形态输入顺序不同,则得到的二叉排序树形态也不同!也不同!这种既查找又插入的过程称为这种既查找又插入的过程称为动态查找动态查找。二叉排序树既有类似于折半查找的特性,又采用了链表存二叉排序树既有类似于折半查找的特性,又采用了链表存储,它是动态查找表的一种适宜表示。储,它是动态查找表的一种适宜表示。数据结构计算机与信息学院 姜敏 第11页45452424535312129090如果待如果待查找的关键字序列输入顺序为:查找的关键字序列输入
11、顺序为:(2424,5353,4545,4545,1212,2424,9090)24245353454512129090查查找找成成功,功,返返回回查查找找成成功,功,返返回回讨论讨论1 1:二叉排序树的插入和查找操作:二叉排序树的插入和查找操作 则生成二叉排序则生成二叉排序树的过程为:树的过程为:例例:输入待查找的关键字序列输入待查找的关键字序列=(4545,2424,5353,4545,1212,2424,9090)则生成的二叉排则生成的二叉排序树形态不同序树形态不同:查查找找成成功功返返回回查查找找成成功功返返回回数据结构计算机与信息学院 姜敏 第12页bstnode BSTSEARCH
12、(bstnode t,keytype k)bstnode p;p=t;while(p)if(p.key=k)return p;if(p.key k)p=p.lchild;else p=p.rchild;return NULL;1.二叉排序树的查找二叉排序树的查找452453122890二叉排序树的二叉排序树的查找查找&插入插入算法如何实现?算法如何实现?数据结构计算机与信息学院 姜敏 第13页2.二叉排序树的结点插二叉排序树的结点插入入452453122890a.a.若原树为空,返回若原树为空,返回以新插入结点为树根的树以新插入结点为树根的树。b.否则,找到要插入的父结点。否则,找到要插入的父
13、结点。c.将新结点插入确定位置将新结点插入确定位置474745,4745,向右子树搜索向右子树搜索4753,4753,向左子树搜索向左子树搜索5353左子树为空,左子树为空,4747应该插入到此处应该插入到此处,47数据结构计算机与信息学院 姜敏 第14页bstnode INSERTBST(bstnode t,bstnode s)bstnode f,p;p=t;if(t=NULL)return s;/原树原树t为空为空 while(p!=NULL)/找插入父结点找插入父结点 f=p;/保存当前节点指针保存当前节点指针 if(s.key=p.key)return t;/s在在t中已经存在中已经存
14、在 if(s.keyp.key)p=p.lchild;/比当前结点小,向左比当前结点小,向左 else p=p.rchild;/比当前结点大,向右比当前结点大,向右 if(s.keyf.key)f.lchild=s;/找插入父结点找插入父结点,插入确定位置插入确定位置 else f.rchild=s;return t;二叉排序树的结点插入算法二叉排序树的结点插入算法数据结构计算机与信息学院 姜敏 第15页对于二叉排序树,删除树上一个结点相当于删除有序序列中对于二叉排序树,删除树上一个结点相当于删除有序序列中的一个记录,删除后仍需保持二叉排序树的特性。的一个记录,删除后仍需保持二叉排序树的特性。
15、(对链表进行删除操作是很方便的)(对链表进行删除操作是很方便的)具体算法参看树具体算法参看树D D课件课件讨论讨论2 2:二叉排序树的删除操作:二叉排序树的删除操作数据结构计算机与信息学院 姜敏 第16页1)1)二叉排序树上查找某关键字等于给定值的结点过二叉排序树上查找某关键字等于给定值的结点过程,其实就是走了一条从根到该结点的路径。程,其实就是走了一条从根到该结点的路径。比较的关键字次数比较的关键字次数此结点的层次数此结点的层次数;最多的比较次数最多的比较次数树的深度(或高度),即树的深度(或高度),即 loglog2 2 n n+1+12)2)一棵二叉排序树的平均查找长度为:一棵二叉排序树
16、的平均查找长度为:3.3.二叉排序树的查找分析二叉排序树的查找分析其中:其中:n ni i 是每层结点个数;是每层结点个数;c ci i 是结点所在层次数;是结点所在层次数;m m 为树深。为树深。11ASLmiiincn数据结构计算机与信息学院 姜敏 第17页最坏情况:最坏情况:即插入的即插入的n个元素从一开始就有序,个元素从一开始就有序,变成单支树的形态!变成单支树的形态!此时树的深度为此时树的深度为n ;ASL=(n+1)/2 此时查找效率与顺序查找情况相同。此时查找效率与顺序查找情况相同。最好情况最好情况:即:与折半查找中的判定树相同(形态比较均衡):即:与折半查找中的判定树相同(形态
17、比较均衡)树的深度为:树的深度为:log 2n +1;ASL=(n+1)/n*log 2(n+1)1;与折半查找相同。;与折半查找相同。数据结构计算机与信息学院 姜敏 第18页3)对有)对有 n 个关键字的二叉排序树的平均查找长度个关键字的二叉排序树的平均查找长度:设每种树态出现概率相设每种树态出现概率相 同同,查找每个关键字也,查找每个关键字也是等概率的。是等概率的。则则ASL求解过程可推导。求解过程可推导。结论:二叉排序树的结论:二叉排序树的ASL2(11/n)ln n问:如何能让二叉排序树的查找过程保持最好情况?问:如何能让二叉排序树的查找过程保持最好情况?数据结构计算机与信息学院 姜敏
18、 第19页二 平衡二叉树(AVL树)什么是平衡二叉树什么是平衡二叉树(Balanced Binary TreeBalanced Binary Tree)?平衡二叉树是空树平衡二叉树是空树,或者是具有以下性质的二叉树或者是具有以下性质的二叉树:它的左子树和右子树也都是它的左子树和右子树也都是平衡二叉树并且平衡二叉树并且左子树和右子树的深度之差的绝对值不超过左子树和右子树的深度之差的绝对值不超过1 1结点的结点的平衡因子平衡因子BFBF (Balance Factor)(Balance Factor)是是左子树的深度减去右子树的深度左子树的深度减去右子树的深度,它只可能是它只可能是 -1,0,1-
19、1,0,1平衡二叉树平衡二叉树(也称也称AVLAVL树树)的深度为的深度为O(logO(log2 2N)N)(其中其中N N为结点个数为结点个数)它的平均查找长度也是它的平均查找长度也是O(logO(log2 2N)N)数据结构计算机与信息学院 姜敏 第20页平衡二叉树及平衡因子举例-1100-110平衡的二叉树平衡的二叉树1100数据结构计算机与信息学院 姜敏 第21页不平衡的二叉树不平衡的二叉树-1000-210 2 2-101 00不平衡二叉树及平衡因子举例危急危急结点结点危急危急结点结点数据结构计算机与信息学院 姜敏 第22页二叉排序树在结点添加过程中失衡二叉排序树在结点添加过程中失衡
20、的几种情况的几种情况LLRRLRRL2a1b0c0c0c0c-1b-1b1b-2a2a-2a数据结构计算机与信息学院 姜敏 第23页二叉排序树转成平衡树失去平衡后需要进行调整的四种情况(1)单向右旋平衡处理LL当在左子树上插入左结点,使平衡因子由1增至2时(2)单向左旋平衡处理RR当在右子树上插入右结点,使平衡因子由-1增至-2时(3)双向旋转(先左后右)平衡处理LR当在左子树上插入右结点,使平衡因子由1增至2时(4)双向旋转(先右后左)平衡处理RL当在右子树上插入左结点,使平衡因子由-1增至-2时数据结构计算机与信息学院 姜敏 第24页2A1B0A0BBLBRARhh-1h-1ARBRLLB
展开阅读全文