查找的概念(1).ppt课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《查找的概念(1).ppt课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 查找 概念 ppt 课件
- 资源描述:
-
1、1第八章第八章 查找查找v查找的概念查找的概念v静态查找表静态查找表v动态查找表动态查找表v 哈哈希表希表2查找表查找表 是由同一类型的数据元素是由同一类型的数据元素(或记录或记录)构成构成的集合的集合,由于由于“集合集合”中的数据元素之间存在着中的数据元素之间存在着松散的关系,因此查找表是一种应用灵便的数松散的关系,因此查找表是一种应用灵便的数据结构。据结构。对查找表的操作对查找表的操作:查询某个查询某个“特定的特定的”数据元素是否在查找表中;数据元素是否在查找表中;检索某个检索某个“特定的特定的”数据元素的各种属性;数据元素的各种属性;在查找表中插入一个数据元素;在查找表中插入一个数据元素
2、;从查找表中删去某个数据元素从查找表中删去某个数据元素 查找的概念3静态查找表静态查找表仅作查询和检索操作的查找表。静态查找仅作查询和检索操作的查找表。静态查找表在查找过程中查找表本身不发生变化。表在查找过程中查找表本身不发生变化。动态查找表动态查找表在查找过程中同时插入查找表中不存在的在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已存在的某个数据元素,或者从查找表中删除已存在的某个数据元素数据元素,此类表为动态查找表。动态查找表在此类表为动态查找表。动态查找表在查找过程中查找表可能会发生变化。查找过程中查找表可能会发生变化。查找表的分类:查找表的分类:4关键字关键字是数据元
3、素(或记录)中某个数据项的值,是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录)。若用以标识(识别)一个数据元素(或记录)。若此关键字可以识别唯一的一个记录,则称之谓此关键字可以识别唯一的一个记录,则称之谓“主关键字主关键字”。若此关键字能识别若干记录,则。若此关键字能识别若干记录,则称之谓称之谓“次关键字次关键字”。学号学号 姓名姓名 专业专业 年龄年龄 0101 王洪王洪 计算机计算机 17 17 02 02 孙文孙文 计算机计算机 18 18 03 03 谢军谢军 计算机计算机 1818 04 04 李辉李辉 计算机计算机 2020 05 05 沈祥福沈祥福 计
4、算机计算机 25 25 06 06 余斌余斌 计算机计算机 1919 07 07 巩力巩力 计算机计算机 1717 08 08 王辉王辉 计算机计算机 18185 根据给定的某个值,在查找表中确定一个其关根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或(记录)。键字等于给定值的数据元素或(记录)。若查找表中存在这样一个记录,则称若查找表中存在这样一个记录,则称“查查找成功找成功”,查找结果:给出整个记录的信,查找结果:给出整个记录的信息,或指示该记录在查找表中的位置;息,或指示该记录在查找表中的位置;否则称否则称“查找不成功查找不成功”,查找结果:给,查找结果:给出出“空记录
5、空记录”或或“空指针空指针”。查找查找 6 如何进行查找?如何进行查找?查找的方法取决于查找表的结构。查找的方法取决于查找表的结构。由于查找表中的数据元素之间不存在明显的组由于查找表中的数据元素之间不存在明显的组织规律,因此不便于查找。织规律,因此不便于查找。为了提高查找的效率,为了提高查找的效率,需要在查找表中的需要在查找表中的元素之间人为地元素之间人为地 附加某种确定的关系,换句附加某种确定的关系,换句话说,话说,用另外一种结构来表示查找表。用另外一种结构来表示查找表。7查找方法评价查找方法评价 查找速度查找速度 占用存储空间多少占用存储空间多少 算法本身复杂程度算法本身复杂程度 平均查找
6、长度平均查找长度ASL(Average Search Length):为确定记录在表中的位置,需和给定值进行为确定记录在表中的位置,需和给定值进行比较的关键字的个数的期望值叫查找算法的比较的关键字的个数的期望值叫查找算法的ASL个元素所需比较次数为找到表中第个元素的概率,为查找表中第其中:个记录的表,对含有icpipcpASLniniiiniii1118抽象数据类型静态查找表的定义抽象数据类型静态查找表的定义:ADT StaticSearchTable D是具有相同特性的是具有相同特性的数据元素的集合。每数据元素的集合。每个数据元素含有类型个数据元素含有类型相同的关键字,可唯相同的关键字,可唯
7、一标识数据元素。一标识数据元素。数据关系数据关系R:数据元素同属一个集合。:数据元素同属一个集合。静静 态态 查查 找找 表表数据对象数据对象D:9Create(&ST,n);/构造一个含构造一个含 n 个数据个数据元素的静态查找表元素的静态查找表ST。Destroy(&ST);/销毁表销毁表ST。Search(ST,key);/查找查找 ST 中其关键字等中其关键字等于于kval 的数据元素。的数据元素。Traverse(ST,Visit();/按某种次序对按某种次序对ST的每个元素调用函数的每个元素调用函数Visit()一次且仅一次,一次且仅一次,ADT StaticSearchTable
8、基本操作基本操作 P:10顺序表的查找顺序表的查找typedef struct ElemType*elem;/数据元素存储空间基址,建表时数据元素存储空间基址,建表时 按实际长度分配,按实际长度分配,0号单元留空号单元留空 int length;/表的长度表的长度 SSTable;以顺序表表示静态查找表,则以顺序表表示静态查找表,则Search函数可函数可用顺序查找来实现。用顺序查找来实现。其顺序存储结构如下:其顺序存储结构如下:11i0 1 2 3 4 5 6 7 8 9 10 11 5 13 19 21 37 56 64 75 80 88 92找找6464监视哨监视哨iiii比较次数比较次
9、数=5比较次数:比较次数:查找第查找第n个元素:个元素:1查找第查找第n-1个元素:个元素:2.查找第查找第1个元素:个元素:n查找第查找第i个元素:个元素:n+1-i查找失败查找失败:n+1查找过程:查找过程:从表的一端开始逐个进行记从表的一端开始逐个进行记录的关键字和给定值的比较。录的关键字和给定值的比较。例如:例如:12算法描述:算法描述:int Search_Seq(SSTable ST,KeyType kval)/在顺序表在顺序表ST中顺序查找其关键字等于中顺序查找其关键字等于 key的数的数据元素据元素 ST.elem0.key=kval;/设置设置“哨兵哨兵”for(int i=
10、ST.length;ST.elemi.key!=kval;-i);/从后往前找从后往前找 return i;/若找到,则函数值为该元素在表中的若找到,则函数值为该元素在表中的位置位置,找不到时,找不到时,i为为0 /Search_Seq13顺序查找性能分析顺序查找性能分析查找算法的平均查找长度查找算法的平均查找长度(Average Search Length):为确定记录在查找表中的位置,需和给定值为确定记录在查找表中的位置,需和给定值 进行比较的关键字个数的期望值。进行比较的关键字个数的期望值。niiiCPASL1其中其中:n 为表长为表长Pi 为查找表中第为查找表中第i个记录的概率个记录的
11、概率Ci为找到该记录时,曾和给定值比较过的为找到该记录时,曾和给定值比较过的关键字的个数关键字的个数11niiP14顺序表查找的平均查找长度为:顺序表查找的平均查找长度为:对顺序表而言,对顺序表而言,Ci=n-i+121111n)i(nnASLnissASL=nP1+(n-1)P2+2Pn-1+PnnPi1在等概率查找的情况下,在等概率查找的情况下,15 在不等概率查找的情况下,在不等概率查找的情况下,ASLss 在在 PnPn-1P2P1时取极小值。表中记录按查找概率由时取极小值。表中记录按查找概率由小到达重新排列小到达重新排列,以提高查找效率。以提高查找效率。若查找概率无法事先测定,则查若
12、查找概率无法事先测定,则查找过程采取的改进办法是,在每次查找过程采取的改进办法是,在每次查找之后,将刚刚查找到的记录直接移找之后,将刚刚查找到的记录直接移至表尾的位置上。至表尾的位置上。16顺序表的查找算法简单,但平均查顺序表的查找算法简单,但平均查找长度较大,不适用于表长较大的查找找长度较大,不适用于表长较大的查找表。表。若以若以有序表有序表表示静态查找表,则查表示静态查找表,则查找过程可以基于找过程可以基于“折半折半”进行。进行。有序表的查找有序表的查找折半查找折半查找查找过程查找过程:每次将待查记录所在区间缩小一:每次将待查记录所在区间缩小一半。半。适用条件适用条件:采用顺序存储结构的:
13、采用顺序存储结构的有序表有序表。17折半查找算法实现折半查找算法实现1.1.设表长为设表长为n n,lowlow、highhigh和和midmid分别指向待分别指向待查元素所在区间的上界、下界和中点查元素所在区间的上界、下界和中点,k k为为给定值。给定值。2.2.初始时,令初始时,令low=1,high=n,mid=low=1,high=n,mid=(low+high)/2(low+high)/2 让让k k与与midmid指向的记录比较指向的记录比较若若k=rmid.keyk=rmid.key,查找成功,查找成功若若krmid.keykrmid.keykrmid.key,则,则low=mi
14、d+1low=mid+13.3.重复上述操作,直至重复上述操作,直至lowhighlowhigh时,查找失败。时,查找失败。18lowhighmid例 1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92找找211 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhighmid1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhighmid例如例如 key=21 的查找过程的查找过程low 指示查找区间的下界;hi
15、gh 指示查找区间的上界;mid=(low+high)/2。19例例key=70 的查找过程的查找过程1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhighmid找找701 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhighmid1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92low highmid1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88
16、92lowhighmid201 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhigh当下界当下界low大于上界大于上界high时,则说明表中时,则说明表中没有关键字等于没有关键字等于Key的元素,查找不成功。的元素,查找不成功。21int count=0;/记录查找次数记录查找次数int Search_Bin(SSTable ST,KeyType kval)/在顺序表在顺序表ST中顺序查找其关键字等于中顺序查找其关键字等于 key的数据元素的数据元素 int low=1,mid,high=ST.length;/置区间初值置区间初
17、值while(low=high)count+;mid=(low+high)/2;if(kval=ST.elemmid.key)return mid;/若找到,则函数值为该元素在表中的位置若找到,则函数值为该元素在表中的位置else if(kvaldata.key)else if(LT(key,T-data.key)else p=f;return FALSE;/查找不成功 p=T;return TRUE;/查找成功SearchBST(T-lchild,key,T,p);/在左子树中继续查找SearchBST(T-rchild,key,T,p);/在右子树中继续查找44fT设 key=48fTfT
18、22pfTfTTTTfffp3020104035252345 根据动态查找表的定义,根据动态查找表的定义,“插入插入”操操作在查找不成功时才进行作在查找不成功时才进行;若二叉排序树为空树,则新插入的结若二叉排序树为空树,则新插入的结点为新的根结点;否则,新插入的结点为新的根结点;否则,新插入的结点必为一个新的叶子结点,其插入位点必为一个新的叶子结点,其插入位置由查找过程得到。置由查找过程得到。二叉排序树的插入算法二叉排序树的插入算法46int InsertBST(BiTree&T,ElemType e)if(!SearchBST(T,e.key,NULL,p)s=new BiTNode;/为新
19、结点分配空间为新结点分配空间s-data=e;s-lchild=s-rchild=NULL;if (!p)T=s;/插入插入 s 为新的根结点为新的根结点 else if(e.keydata.key)p-lchild=s;/插入插入*s 为为*p 的左孩子的左孩子else p-rchild=s;/插入插入*s 为为*p 的右孩子的右孩子 return 1;/插入成功插入成功 else return 0;/Insert BST503080209085403588325050503040355050809047 一个无序序列可以通过构造一棵二一个无序序列可以通过构造一棵二叉排序树而变成一个有序序列
20、叉排序树而变成一个有序序列 每次插入的新结点都是二叉排序树每次插入的新结点都是二叉排序树上新的叶子结点上新的叶子结点 插入时不必移动其它结点,仅需修插入时不必移动其它结点,仅需修改某个结点的指针改某个结点的指针结论结论48二叉排序树的删除算法二叉排序树的删除算法 和插入相反,删除在查找成功之后进行,并和插入相反,删除在查找成功之后进行,并且要求在删除二叉排序树上某个结点之后,仍且要求在删除二叉排序树上某个结点之后,仍然保持二叉排序树的特性。然保持二叉排序树的特性。可分三种情况讨论:可分三种情况讨论:被删除的结点是叶子;被删除的结点是叶子;被删除的结点只有左子树或者只有右子树;被删除的结点只有左
21、子树或者只有右子树;被删除的结点既有左子树,也有右子树被删除的结点既有左子树,也有右子树。4950308020908540358832(1)被删除的结点是叶子结点叶子结点例如例如:被删关键字被删关键字=2088其双亲结点中相应指针域的值改为其双亲结点中相应指针域的值改为“空空”5050308020908540358832(2)被删除的结点只有左子树只有左子树或者只有右子树只有右子树 其双亲结点的相应指针域的值改为其双亲结点的相应指针域的值改为“指向被删除结点的左子树或右子树指向被删除结点的左子树或右子树”。被删关键字被删关键字=40805150308020908540358832(3)被删除的
22、结点既有左子树,也有右子树既有左子树,也有右子树4040以其前驱替代之,然以其前驱替代之,然后再删除该前驱结点后再删除该前驱结点被删结点前驱结点被删关键字被删关键字=5052Status DeleteBST(BiTree&T,KeyType key)/若二叉排序树若二叉排序树 T 中存在其关键字等于中存在其关键字等于 key 的的 /数据元素,则删除该数据元素结点,并返回数据元素,则删除该数据元素结点,并返回 /函数值函数值 TRUE,否则返回函数值,否则返回函数值 FALSE if(!T)return FALSE;/不存在关键字等于key的数据元素 else /DeleteBST算法描述如下
23、:算法描述如下:53if(EQ(key,T-data.key)/找到关键字等于key的数据元素else if(LT(key,T-data.key)else Delete(T);return TRUE;DeleteBST(T-lchild,key);/继续在左子树中进行查找DeleteBST(T-rchild,key);/继续在右子树中进行查找54void Delete(BiTree&p)/从二叉排序树中删除结点 p,/并重接它的左子树或右子树 if(!p-rchild)else if(!p-lchild)else /Delete其中删除操作删除操作过程如下所描述:55p/右子树为空树则只需重接
24、它的左子树q=p;p=p-lchild;delete(q);pqq56/左子树为空树只需重接它的右子树q=p;p=p-rchild;delete(q);ppqq57q=p;s=p-lchild;while(!s-rchild)q=s;s=s-rchild;/s 指向被删结点的前驱/左右子树均不空p-data=s-data;if(q!=p)q-rchild=s-lchild;else q-lchild=s-lchild;/重接*q的左子树delete(s);s58PCpFPRfCLQSLQLSqsfCpFPRSCLQQLSLqsfLpFPRPCLqsq=p;s=p-lchild;while(!s
25、-rchild)q=s;s=s-rchild;/s 指向被删结点的前驱/左右子树均不空p-data=s-data;if(q!=p)q-rchild=s-lchild;/重接*q的右子树 else q-lchild=s-lchild;/重接*q的左子树delete(s);59二叉排序树查找性能的分析二叉排序树查找性能的分析 对于每一棵特定的二叉排序树,均可按照对于每一棵特定的二叉排序树,均可按照平均查找长度的定义来求它的平均查找长度的定义来求它的 ASL 值,显然,值,显然,由值相同的由值相同的 n 个关键字,构造所得的不同形态个关键字,构造所得的不同形态的各棵二叉排序树的平均查找长的各棵二叉排
展开阅读全文