数据结构查找.ppt
《数据结构查找.ppt》由会员分享,可在线阅读,更多相关《数据结构查找.ppt(77页珍藏版)》请在沃文网上搜索。
1、1第第8章章 查找查找l1、查找表、查找表也叫检索也叫检索,是由同一类型的数据元素(或记,是由同一类型的数据元素(或记录)构成的集合。由于录)构成的集合。由于“集合集合”中的数据元素之间存在完全中的数据元素之间存在完全松散的关系,因此查找表是一种非常灵便的数据结构。松散的关系,因此查找表是一种非常灵便的数据结构。l2、查找表的操作、查找表的操作l查找某个查找某个“特定特定”的数据元素是否在查找表中;的数据元素是否在查找表中;l检索某个检索某个“特定特定”的数据元素的各种属性;的数据元素的各种属性;l在查找表中插入一个数据元素;在查找表中插入一个数据元素;l从查找表中删除某个数据元素。从查找表中
2、删除某个数据元素。2l3、静态查找表、动态查找表、静态查找表、动态查找表l若对查找表只作前两种统称为若对查找表只作前两种统称为“查找查找”的操作,则此的操作,则此类查找为类查找为静态查找表静态查找表。l若在查找过程中同时插入查找表中不存在的数据元素,若在查找过程中同时插入查找表中不存在的数据元素,或从查找表中删除已存在的某个数据元素,则称此类表或从查找表中删除已存在的某个数据元素,则称此类表为为动态查找表。动态查找表。l4、关键字、次关键字、关键字、次关键字l关键字:关键字:是数据元素(或记录)中某个数据项的值,用是数据元素(或记录)中某个数据项的值,用它可以标识(识别)一个数据元素(或记录)
3、。若此关它可以标识(识别)一个数据元素(或记录)。若此关键字可以唯一地标识一个记录,则称此关键字键字可以唯一地标识一个记录,则称此关键字为主关键为主关键字字。反之,则称此关键字为。反之,则称此关键字为次关键字次关键字。第第8章章 查找查找3l5、查找、查找l根据给定的某个值,在查找表中确定一个其关键字等于给定根据给定的某个值,在查找表中确定一个其关键字等于给定值的记录或数据元素。值的记录或数据元素。若表中存在这样的一个记录,则称查若表中存在这样的一个记录,则称查找是成功的找是成功的,此时查找的结果为给出整个记录的信息,或指,此时查找的结果为给出整个记录的信息,或指示该记录在查找表中的位置;示该
4、记录在查找表中的位置;l6、查找方法评价、查找方法评价l查找速度、占用存储空间多少、算法本身复杂程度查找速度、占用存储空间多少、算法本身复杂程度l平均查找长度平均查找长度ASL(Average Search Length):为确定记录在为确定记录在表中的位置,需和给定值进行比较的关键字的个数的期望值表中的位置,需和给定值进行比较的关键字的个数的期望值叫叫查找算法的查找算法的平均查找长度。平均查找长度。l若表中不存在关键字等于给定值的记录若表中不存在关键字等于给定值的记录,则称查找不成功。,则称查找不成功。此时查找的结果可给出一个此时查找的结果可给出一个“空空”记录或记录或“空空”指针。指针。第
5、第8章章 查找查找4i例例 0 1 2 3 4 5 6 7 8 9 10 11 5 13 19 21 37 56 64 75 80 88 92找找6464监视哨监视哨iiii比较次数比较次数=5l比较次数:比较次数:l查找第查找第n个元素:个元素:1l查找第查找第n-1个元素:个元素:28.1 静态查找表静态查找表l一、顺序表的查找(顺序查找)一、顺序表的查找(顺序查找)l1、顺序查找、顺序查找 从表中最后一个记录开始,逐个进行记录的关键从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成
6、功,找到所查找记录;反之,若直至第一个记录,其则查找成功,找到所查找记录;反之,若直至第一个记录,其关键字和给定值比较都不等,则表明表中没有所查记录,查找关键字和给定值比较都不等,则表明表中没有所查记录,查找不成功。不成功。l查找第查找第1个元素:个元素:nl查找第查找第i个元素:个元素:n+1-il查找失败查找失败:n+152、查找操作的性能分析、查找操作的性能分析l对于含有对于含有n个记录的表,查找成功时的平均查找长度为:个记录的表,查找成功时的平均查找长度为:l其中其中:n 为表长,为表长,Pi 为查找表中第为查找表中第i个记录的概率,且个记录的概率,且 ,Ci为找到该记录时,曾和给定值
7、比较过的关键字的个数。为找到该记录时,曾和给定值比较过的关键字的个数。l从顺序查找的过程可见,从顺序查找的过程可见,Ci取决于所查找记录在表中的位置。取决于所查找记录在表中的位置。查找表中最后一个记录是,仅需比较一次,而查找表中第一查找表中最后一个记录是,仅需比较一次,而查找表中第一个记录时,则需比较个记录时,则需比较n次。一般情况下次。一般情况下Ci等于等于n-i+1。6ASL=nP1+(n-1)P2+2Pn-1+Pnl从上式可知,在不等概率查找的情况下,从上式可知,在不等概率查找的情况下,ASLss 在在 PnPn-1P2P1时取极小值。时取极小值。l应对记录的查找概率进行排序,使表中记录
8、按查找概率由应对记录的查找概率进行排序,使表中记录按查找概率由小到大重新排列,以便提高查找效率。小到大重新排列,以便提高查找效率。l查找概率无法事先测定,则查找过程采取的改进办法是,查找概率无法事先测定,则查找过程采取的改进办法是,在每次查找之后,将刚刚查找到的记录直接移至表尾的位在每次查找之后,将刚刚查找到的记录直接移至表尾的位置上。置上。7l顺序查找的缺点是顺序查找的缺点是平均查找长度较大平均查找长度较大,特别是当,特别是当n很大时,很大时,查找效率低。然而,它有很大的优点是:查找效率低。然而,它有很大的优点是:算法简单且适应算法简单且适应面广。面广。l当查找不成功时的情形不忽视时,查找算
9、法的平均查找长当查找不成功时的情形不忽视时,查找算法的平均查找长度应是查找成功时的平均查找长度与查找不成功时的平均度应是查找成功时的平均查找长度与查找不成功时的平均查找长度之和。查找长度之和。l对于顺序查找,不论给定值对于顺序查找,不论给定值key为何值,查找不成功时和为何值,查找不成功时和给定值进行比较的关键字个数均为给定值进行比较的关键字个数均为n+1。假设查找成功与假设查找成功与不成功的可能性相同不成功的可能性相同,对每个记录的查找概率也相等,则,对每个记录的查找概率也相等,则 ,此时顺序查找的平均查找长度为:,此时顺序查找的平均查找长度为:一、顺序表的查找(顺序查找)一、顺序表的查找(
10、顺序查找)8l1、折半查找、折半查找 折半查找的查找过程是:先确定待查记录折半查找的查找过程是:先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。每次将待查记录所在区间缩小一半。该记录为止。每次将待查记录所在区间缩小一半。二、有序表的查找(折半查找)二、有序表的查找(折半查找)l算法实现:假设表长为算法实现:假设表长为n,low、high和和mid分别指向待查元分别指向待查元素所在区间的上界、下界和中点素所在区间的上界、下界和中点,k为给定值,初始时,令为给定值,初始时,令low=1,high=n,mid=(low
11、+high)/2 l让让k与与mid指向的记录比较指向的记录比较l若若k=rmid.key,查找成功查找成功l若若krmid.key,则则low=mid+1l重复上述操作,直至重复上述操作,直至lowhigh时,时,查找失败查找失败。9lowhighmid例例 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 8
12、0 88 92lowhighmidCh7_2.c例如:已知如下例如:已知如下11个数据元素的有序表(个数据元素的有序表(05,13,19,21,37,56,64,75,80,88,92),现要查找关键字),现要查找关键字为为21和和70 的数据元素。的数据元素。1、折半查找、折半查找10例例 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
13、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 92lowhighmid1 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92lowhigh112、折半查找的性能分析、折半查找的性能分析l先先看看上述上述11个元素的表的具体例子。每一个的比较次数。个元素的表的具体例子。每一个的比较次数。l这个查找过程可用图这个查找过程可用图8.1所示的二叉所示的二叉树来描述。树中每个结点表示表中树来描述。树中每个结
14、点表示表中一个记录,结点中的值为该记录在一个记录,结点中的值为该记录在表中的位置,通常称这个描述查找表中的位置,通常称这个描述查找过程的过程的二叉树为判定树。二叉树为判定树。81121074193651 2 3 4 5 6 7 8 9 10 115 13 19 21 37 56 64 75 80 88 92l从判定树上可见,查从判定树上可见,查21的过程恰好是走了一条从根到结点的过程恰好是走了一条从根到结点(4)的路径,)的路径,和给定值进行比较的关键字个数为该路径上的和给定值进行比较的关键字个数为该路径上的结点数或结点结点数或结点4在判定树上的层次数。在判定树上的层次数。12l二分法查找在查
15、找成功时进行比较的关键字个数最多不超过二分法查找在查找成功时进行比较的关键字个数最多不超过树的深度,而具有树的深度,而具有n个结点的判定树的深度为个结点的判定树的深度为 log2n+1。所。所以折半查找法在查找成功时和给定值进行比较的关键字个数以折半查找法在查找成功时和给定值进行比较的关键字个数至多为至多为 log2n+1l对于任意的对于任意的n,当,当n较大(较大(n50时),可有下列近似结果:时),可有下列近似结果:l可见,折半查找的效率比顺序查找高,但折半查找只适用于可见,折半查找的效率比顺序查找高,但折半查找只适用于有序表,且限于顺序存储结构。有序表,且限于顺序存储结构。l树中层数为树
16、中层数为1的结点有的结点有1个,层数为个,层数为2的结点有的结点有2个,层数为个,层数为h的结点有的结点有2h-1个。假设表中每个记录的查找概率个。假设表中每个记录的查找概率 ,则查,则查找成功时折半查找的平均查找长度为:找成功时折半查找的平均查找长度为:131 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1822 12 13 8 9 20 33 42 44 38 24 48 60 58 74 57 86 5322 48 861 7 13索引表索引表查查38三、索引顺序表的查找(分块查找)三、索引顺序表的查找(分块查找)l若以索引顺序表表示静态查找表,则若以
17、索引顺序表表示静态查找表,则search函数可用分块函数可用分块查找来实现。查找来实现。分块查找又称索引顺序查找分块查找又称索引顺序查找,这是顺序查找的,这是顺序查找的一种改进方法。在此查找法中,除表本身以外,尚需要建立一种改进方法。在此查找法中,除表本身以外,尚需要建立一个一个“索引表索引表”。例如:下图所示为一个表及其索引表,表。例如:下图所示为一个表及其索引表,表中含有中含有18个记录,可分成三个子表(个记录,可分成三个子表(R1,R2,R6)、)、(R7,R8,R12)、()、(R13,R14,R18)。)。14l分块查找方法分块查找方法 所谓所谓“分块有序分块有序”指的是第指的是第2
18、个子表中所有个子表中所有记录的关键字均大于第记录的关键字均大于第1子表中的最大关键字,第子表中的最大关键字,第3子表中子表中的所有关键字均大于第的所有关键字均大于第2字表中的最大关键字,依次类推,字表中的最大关键字,依次类推,分快查找过程需分两步进行。先确定待查记录所在的块分快查找过程需分两步进行。先确定待查记录所在的块(子表),然后在块中顺序查找。(子表),然后在块中顺序查找。l此时的平均查找长度不仅和表长有关,而且和每一块中此时的平均查找长度不仅和表长有关,而且和每一块中的记录个数的记录个数s有关。有关。l分块查找的平均长度为:分块查找的平均长度为:ASLbS=Lb+Lwl其中其中Lb为查
19、找索引表确定所在块的平均查找长度,为查找索引表确定所在块的平均查找长度,Lw为为在在块中查找元素的平均查找长度。块中查找元素的平均查找长度。三、索引顺序表的查找(分块查找)三、索引顺序表的查找(分块查找)15顺序查找顺序查找二分法查找二分法查找分块查找分块查找ASL最大最大最小最小两者之间两者之间表结构表结构有序表有序表无序表无序表有序表有序表分块有序表分块有序表存储结构存储结构顺序存储结构顺序存储结构线性链表线性链表顺序存储结构顺序存储结构顺序存储结构顺序存储结构线性链表线性链表查找方法的比较查找方法的比较168.2 动态查找表动态查找表l动态查找表的特点:动态查找表的特点:表结构本身是在查
20、找过程中动态地生成表结构本身是在查找过程中动态地生成的,即对于给定值的,即对于给定值key,若,若表中存在其关键字等于表中存在其关键字等于key的的记录,记录,则查找成功返回,否则插入关键字等于则查找成功返回,否则插入关键字等于key的记录。的记录。l一、二叉树排序树及其查找过程一、二叉树排序树及其查找过程l1、什么是二叉排序树?、什么是二叉排序树?l二叉排序树或是一棵空树;或是具有下列性质的二叉树:二叉排序树或是一棵空树;或是具有下列性质的二叉树:l(1)若它的左子树不空,则左子树上所有结点的值均小)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;于它的根结点的值;l(2)若它
21、的右子树不空,则右子树上所有结点的值均)若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;大于或等于它的根结点的值;l(3)它的左、右子树也分别为二叉排序树。)它的左、右子树也分别为二叉排序树。17一、二叉树排序树及其查找过程一、二叉树排序树及其查找过程l 2、查找过程、查找过程90782410061373531245l例如右图所示为二叉排序树。例如右图所示为二叉排序树。l若二叉排序树为空,则查找不成功;否则若二叉排序树为空,则查找不成功;否则l(1)若给定值等于根结点的关键字,则查找)若给定值等于根结点的关键字,则查找成功;成功;l(2)若给定值小于根结点的关键字,则继续在
22、左子)若给定值小于根结点的关键字,则继续在左子树上进行查找;树上进行查找;l(3)若给定值大于根结点的关键字,则继续在右子树上进)若给定值大于根结点的关键字,则继续在右子树上进行查找。行查找。18查找过程举例:查找过程举例:100、4090782410061373531245一、二叉树排序树及其查找过程一、二叉树排序树及其查找过程19二、二叉排序树的插入与删除二、二叉排序树的插入与删除l1、二叉排序树的插入、二叉排序树的插入l二叉排序树是一种动态树表。其特点是:树的结构通常不是二叉排序树是一种动态树表。其特点是:树的结构通常不是一次生成的,而是在查找过程中,一次生成的,而是在查找过程中,当树中
23、不存在关键字等于当树中不存在关键字等于给定值的结点时再进行插入给定值的结点时再进行插入。新插入的结点一定是一个新添。新插入的结点一定是一个新添加的叶子结点,并且是查找不成功时,查找路径上访问的最加的叶子结点,并且是查找不成功时,查找路径上访问的最后一个结点的左孩子或右孩子结点。后一个结点的左孩子或右孩子结点。l举例:若从空树出发,经过一系列的查找插入操作之后,可举例:若从空树出发,经过一系列的查找插入操作之后,可生成一棵二叉树。设查找的关键字序列为生成一棵二叉树。设查找的关键字序列为45,24,53,45,12,24,90,则生成的二叉排序树如图所示。二叉排序,则生成的二叉排序树如图所示。二叉
24、排序树生成:从空树出发,经过一系列的查找、插入操作之后,树生成:从空树出发,经过一系列的查找、插入操作之后,可生成一棵二叉排序树。可生成一棵二叉排序树。20l容易看出,中序遍历二叉树可得到容易看出,中序遍历二叉树可得到一个关键字的有序序列。这就是说,一个关键字的有序序列。这就是说,一个无序序列可以通过构造一棵二一个无序序列可以通过构造一棵二叉排序树而变成一个有序序列,构叉排序树而变成一个有序序列,构造树的过程即为对无序序列进行排造树的过程即为对无序序列进行排序的过程。序的过程。l从上面的插入过程还可以看到,每次插入的新的结点都是二叉从上面的插入过程还可以看到,每次插入的新的结点都是二叉排序树上
25、新的叶子结点,则在进行插入操作时,不必移动其它排序树上新的叶子结点,则在进行插入操作时,不必移动其它记录,仅需要改动某个结点的指针,由空变为非空即可。这就记录,仅需要改动某个结点的指针,由空变为非空即可。这就相当于在一个有序序列上插入一个记录而不需要移动其它记录。相当于在一个有序序列上插入一个记录而不需要移动其它记录。它表明,它表明,二叉排序树既拥有类似折半查找的特性,又采用了链二叉排序树既拥有类似折半查找的特性,又采用了链表作存储结构,因此是动态查找表的一种适宜表示。表作存储结构,因此是动态查找表的一种适宜表示。24455312901、二叉排序树的插入、二叉排序树的插入212、二叉排序树的删
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 查找