数据结构-查找.ppt
《数据结构-查找.ppt》由会员分享,可在线阅读,更多相关《数据结构-查找.ppt(99页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、CH9 查找n查找的基本概念查找的基本概念n9.1 静态查找表静态查找表u9.1.1 顺序查找顺序查找u9.1.2 有序表的查找有序表的查找u9.1.3 索引顺序表的查找索引顺序表的查找n9.2 动态查找表动态查找表u9.2.1 二叉排序树和平衡二叉树二叉排序树和平衡二叉树u9.2.2 B和和B树树u小结小结n9.3 哈希表哈希表n本章总结本章总结查找的基本概念n1.查找表查找表n2.查找查找u关键字关键字l主关键字主关键字l次关键字次关键字u查找:根据某个给定的值,在表中确定一个其关键字等查找:根据某个给定的值,在表中确定一个其关键字等于给定值于给定值 的记录或数据元素。的记录或数据元素。l
2、查找成功查找成功l查找失败查找失败查找的基本概念n3.查找表的分类查找表的分类u静态查找表静态查找表u动态查找表动态查找表n4.衡量查找算法效率的标准衡量查找算法效率的标准u平均查找长度平均查找长度ASL (Average Search Length)u查找成功时的平均查找长度查找成功时的平均查找长度查找的基本概念n5.本章数据元素类型与比较运算的符号约定本章数据元素类型与比较运算的符号约定u数据类型定义数据类型定义 typedef struct KeyType key;ElemTypeu关键字比较的符号约定关键字比较的符号约定EQ(a,b)LT(a,b)LQ(a,b)查找的基本概念n6.查找
3、的基本方法查找的基本方法比较式查找法比较式查找法计算式查找法计算式查找法基于线性表的查找法基于线性表的查找法(静态查找)(静态查找)基于树的查找法基于树的查找法(动态查找)(动态查找)HASH查找法查找法顺序查找法顺序查找法折半查找法折半查找法分块查找法分块查找法二叉排序树二叉排序树平衡二叉树平衡二叉树B树树B树树 9.1 静态查找表n静态查找表主要有三种结构:静态查找表主要有三种结构:u 顺序表顺序表u 有序顺序表有序顺序表u 索引顺序表索引顺序表n针对静态查找表的查找算法主要有:针对静态查找表的查找算法主要有:u顺序查找(线性查找)顺序查找(线性查找)u折半查找(二分查找)折半查找(二分查
4、找)u分块查找(索引顺序查找)分块查找(索引顺序查找)9.1.1 顺序查找法n1.顺序表上的顺序查找的基本思想顺序表上的顺序查找的基本思想u从顺序表的一端开始,用给定数据元素的关键字逐个与从顺序表的一端开始,用给定数据元素的关键字逐个与顺序表中各数据元素的关键字比较,顺序表中各数据元素的关键字比较,l若在顺序表中查找到要查找的数据元素,则查找成功,若在顺序表中查找到要查找的数据元素,则查找成功,函数返回该数据元素在顺序表中的位置;函数返回该数据元素在顺序表中的位置;l否则查找失败,函数返回否则查找失败,函数返回0。n2.顺序表的机内存储结构顺序表的机内存储结构typedef structEle
5、mType*elem;int length;SSTable;xa1a2a3an-2an-1anint Search_Seq(SSTable ST,KeyType key)ST.elem0.key=key;for(i=ST.length;!EQ(ST.elemi.key,key);-i);return i;9.1.1 顺序查找法n顺序查找过程顺序查找过程9.1.1 顺序查找法n3.顺序查找操作的性能分析顺序查找操作的性能分析 (设(设nST.length)u(1)查找成功时的平均查找长度)查找成功时的平均查找长度lxi查找成功的比较次数为查找成功的比较次数为ni1(1in)l等概率情况下查找成功
6、的平均查找长度:等概率情况下查找成功的平均查找长度:u(2)任意关键字查找不成功的比较次数为)任意关键字查找不成功的比较次数为n19.1.1 顺序查找法n顺序查找法的特点:顺序查找法的特点:u优点:优点:l算法简单、算法简单、适用面广(适用面广(对顺序结构或链式结构均适用)对顺序结构或链式结构均适用)u缺点:缺点:lASL 太大,时间效率太低。太大,时间效率太低。n思考题:思考题:u对单链表如何线性查找?对单链表如何线性查找?u对非线性(树结构)如何查找对非线性(树结构)如何查找?u有序顺序表上的查找算法有序顺序表上的查找算法?9.1.2 有序表的查找n有序顺序表上的查找算法有序顺序表上的查找
7、算法u(1)顺序查找法)顺序查找法l有序顺序表上顺序查找算法类同顺序表上的顺序查找有序顺序表上顺序查找算法类同顺序表上的顺序查找算法算法u(2)二分查找法(又称折半查找法)二分查找法(又称折半查找法)l前提条件:前提条件:1)表中的记录按关键字有序(设递增有序)表中的记录按关键字有序(设递增有序)2)查找表采用顺序存储结构)查找表采用顺序存储结构l查找过程查找过程折半查找过程示例折半查找过程示例1)查找关键字等于查找关键字等于21的记录的记录1234567891011513192137566475808892ST.elemmid.key21513192137566475808892ST.ele
8、mmid.key21513192137566475808892ST.elemmid.key=21(查找成功)查找成功)2)查找关键字等于查找关键字等于85的记录的记录1234567891011513192137566475808892ST.elemmid.key85513192137566475808892ST.elemmid.key85513192137566475808892失败失败9.1.2 有序表的查找n算法描述算法描述int Search_Bin(SSTable ST,KeyType key)low=1;high=ST.length;while(lowdata.key)return
9、T;else if (LT(key,T-data.key)return SearchBST(T-lchild,key);else return SearchBST(T-rchild,key);2.二叉排序树的查找过程及算法n(2)非递归算法)非递归算法BiTree SearchBST(BiTree T,KeyType key)BiTree p=T;while (p&!(EQ(key,p-data.key)if LT(key,p-data.key)p=p-lchild;else p=p-rchild;return p;/SearchBST3.二叉排序树的插入n思路:思路:u查找不成功,生成一个新
10、结点(如查找不成功,生成一个新结点(如s),并将其插入到二),并将其插入到二叉排序树中;叉排序树中;u查找成功则返回。查找成功则返回。4.二叉排序树结点的删除n二叉排序树结点的删除二叉排序树结点的删除u对于二叉排序树,删除树上一个结点相当于删除有序序对于二叉排序树,删除树上一个结点相当于删除有序序列中的一个记录,要求删除后仍需保持二叉排序树的特列中的一个记录,要求删除后仍需保持二叉排序树的特性。性。n问题:问题:u如何删除二叉排序树的一个结点?如何删除二叉排序树的一个结点?n分析:分析:u设待删结点指针为设待删结点指针为p,p的双亲结点指针为的双亲结点指针为f,不失一般性,不失一般性,设设p为
11、为f的左子女(若为右子女,类似)的左子女(若为右子女,类似)4.二叉排序树结点的删除n情况情况1:p为叶结点为叶结点f-lchild=NULL;free(p);FfPp pf-lchild=p-lchild;free(p);FfPpPLFfPpPRFfPLFfPRf-lchild=p-rchild;free(p);4.二叉排序树结点的删除n情况情况2:P只有左子树只有左子树PL或只有右子树或只有右子树PRFf fPp pPRPL1.PR作为作为s的右子女的右子女:s-rchild=p-rchild;2.c作为作为f的左子女:的左子女:f-lchild=p-lchild;3.删除删除p:free
12、(p);方方法法FfCCLQQLSSLPRqscqsPRFfPpCCLQQLSSLcn情况情况3:PL,PR均非空均非空4.二叉排序树结点的删除方方法法qsPRFfPpCCLQQLSSLcFfCCLQQLSSLPRqpc1.以以S代替代替P,然后删除然后删除s:p-data=s-data;2.SL作为作为Q的右子女的右子女:q-rchild=s-lchild;3.释放结点释放结点s:free(s);4.二叉排序树结点的删除n情况情况3:PL,PR均非空均非空5.二叉排序树的查找分析:n查找过程及查找性能分析查找过程及查找性能分析:u含有含有n个结点的二叉树的平均查找长度和树的形状有关。个结点的
13、二叉树的平均查找长度和树的形状有关。ASL(a)1/6(1+2+2+3+3+3)14/6 ASL(b)1/6(1+2+3+4+5+6)21/6452453123793(a)122437459353(b)5.二叉排序树的查找分析n一般地:一般地:u1)二叉排序树上查找某关键字等于结点值的过程,其实二叉排序树上查找某关键字等于结点值的过程,其实就是走了一条从根到该结点的路径。就是走了一条从根到该结点的路径。l比较的关键字次数此结点的层次数比较的关键字次数此结点的层次数;l最多的比较次数树的深度(或高度);最多的比较次数树的深度(或高度);u2)一棵二叉排序树的平均查找长度为:一棵二叉排序树的平均查
14、找长度为:5.二叉排序树的查找分析u最好的情况最好的情况l二叉排序树的形态同折半查找的判定树二叉排序树的形态同折半查找的判定树(即形态比较(即形态比较均衡)均衡)l ASLlog 2(n1)1;u最坏的情况最坏的情况l插入的插入的n个元素从一开始就有序,个元素从一开始就有序,二叉排序树的形态二叉排序树的形态为一棵单支树为一棵单支树 l ASL1/n(123n)(n1)/2u一般的情况一般的情况l ASLO(n)5.二叉排序树的查找分析n思考:思考:u如何提高二叉排序树的查找效率?如何提高二叉排序树的查找效率?n解决方法解决方法u尽量让二叉树的形状尽量让二叉树的形状均衡均衡!平衡二叉树平衡二叉树
15、二、平衡二叉树n定义定义u1.结点的平衡因子(结点的平衡因子(BF)u2.平衡二叉树(平衡二叉树(AVL树)树)l或者是一棵空树,或者是具有如下性质的二叉树:或者是一棵空树,或者是具有如下性质的二叉树:它的左子树和右子树深度之差的绝对值不超过它的左子树和右子树深度之差的绝对值不超过1 左子树和右子树都是左子树和右子树都是AVL树。树。u3.平衡的二叉排序树平衡的二叉排序树abecdf452453123793二、平衡二叉树n问题:问题:u如何使构造的二叉排序树成为如何使构造的二叉排序树成为AVL树?树?n答:答:u如果在一棵如果在一棵AVL树中插入一个新结点,就有可能造成失树中插入一个新结点,就
16、有可能造成失衡,此时必须衡,此时必须重新调整树的结构重新调整树的结构,使之恢复平衡。我们,使之恢复平衡。我们称调整平衡过程为称调整平衡过程为平衡旋转平衡旋转。u平衡旋转可以归纳为四类:平衡旋转可以归纳为四类:lRR平衡旋转(单向右旋平衡处理)平衡旋转(单向右旋平衡处理)lLL平衡旋转(单向左旋平衡处理)平衡旋转(单向左旋平衡处理)lLR平衡旋转(双向平衡旋转(双向先左后右先左后右旋平衡处理)旋平衡处理)l RL平衡旋转(双向平衡旋转(双向先右后左先右后左旋平衡处理)旋平衡处理)ABDCE右单旋右单旋1.ABDCEh二、平衡二叉树二、平衡二叉树ACDBEACEDB左单旋左单旋2.ABDCFEGA
17、EBDCFG左单旋左单旋右单旋右单旋ABDCFEhh-1G3.二、平衡二叉树3.右单旋右单旋左单旋左单旋4.DACBEFhh-1GACBEFGDACBEFGD二、平衡二叉树9.2.2 B_树和B+树n一、一、B树及其查找树及其查找u1.定义:一棵定义:一棵m阶的阶的B树,或为一棵空树,或为满足下树,或为一棵空树,或为满足下列条件的列条件的m叉树:叉树:l树中每个结点至多树中每个结点至多m棵子树;棵子树;l若根结点不是叶结点,则至少若根结点不是叶结点,则至少2棵子树;棵子树;l除根以外的所有非终端结点至少有除根以外的所有非终端结点至少有m/2 棵子树;棵子树;l所有非终端结点中包含下列信息数据:
18、所有非终端结点中包含下列信息数据:(A0,K1,A1,K2,A2,Kn,An)l叶结点位于同一层次(外部结点叶结点位于同一层次(外部结点/失败点)失败点)2.示例示例(一棵(一棵4阶阶B树及查找过程)树及查找过程)351181784321112713916447533991FFFFFFFFFFFFabcdefghT查找时间取决因素查找时间取决因素(1)等于给定值的关键字所在结点的层次;等于给定值的关键字所在结点的层次;(2)结点中结点中关键字的个数。关键字的个数。3.查找过程查找过程:顺指针查找结点和在结点的关键字中顺序查找交叉进行的顺指针查找结点和在结点的关键字中顺序查找交叉进行的过程。具体
19、方法:过程。具体方法:从根结点开始,将从根结点开始,将key与根结点中的各个关键字与根结点中的各个关键字k1,k2,,kj进行比较,由于该关键字序列有序,可采用顺序进行比较,由于该关键字序列有序,可采用顺序/二分查二分查找方法。找方法。1)若若keyki,(1ij),则查找成功;则查找成功;2)若若key k1,则沿指针则沿指针A0所指的子树中继续查找;所指的子树中继续查找;3)若若kikeyki+1,则沿指针则沿指针Ai所指的子树中继续查找;所指的子树中继续查找;4)若若keykj,则沿指针则沿指针Aj所指的子树中继续查找。所指的子树中继续查找。在自上向下的查找过程中,若直到叶结点也没有找到
20、值为在自上向下的查找过程中,若直到叶结点也没有找到值为key的关键字,则查找失败。的关键字,则查找失败。9.2.2 B_树和B+树n二、二、B树(树(B的变型树)的变型树)u1.定义:一棵定义:一棵m阶的阶的B 树与树与B树的区别在于:树的区别在于:l有有n棵子树的结点中含有棵子树的结点中含有n个关键字;个关键字;l所有的叶结点包含了全部关键字的信息,及指向这些所有的叶结点包含了全部关键字的信息,及指向这些关键字记录的指针,且叶结点本身依关键字从小到大关键字记录的指针,且叶结点本身依关键字从小到大排列。排列。l所有的非终端结点可看成是索引部分,结点中仅含有所有的非终端结点可看成是索引部分,结点
21、中仅含有其子树中根结点的最大其子树中根结点的最大/最小关键字。最小关键字。2.示例示例(一棵(一棵3阶阶B树及查找过程)树及查找过程)59 9715 44 5972 9710 1521 37 4451 5962 7285 91 97rootsqtn小结:小结:比较式查找法比较式查找法计算式查找法计算式查找法基于线性表的查找法基于线性表的查找法(静态查找)(静态查找)基于树的查找法基于树的查找法(动态查找)(动态查找)HASH查找法查找法顺序查找法顺序查找法折半查找法折半查找法分块查找法分块查找法二叉排序树二叉排序树平衡二叉树平衡二叉树B树树B树树9.3 哈希表u9.3.1 什么是哈希表什么是哈
22、希表 u9.3.2 哈希函数的构造方法哈希函数的构造方法u9.3.3 处理冲突的方法处理冲突的方法u9.3.4 哈希表的查找及其分析哈希表的查找及其分析 9.3.1 什么是哈希表nHASH查找法查找法u又称散列法、杂凑法或关键字地址计算法等;又称散列法、杂凑法或关键字地址计算法等;u相应的表称为哈希表。相应的表称为哈希表。n1.基本思想基本思想 H(key)关键字集合关键字集合地址集合地址集合(0.m1)Hkey9.3.1 什么是哈希表n2.哈希函数哈希函数 u哈希函数是一个映像;哈希函数是一个映像;u设置一个长为设置一个长为m的表的表A,用函数用函数H把数据集合中的把数据集合中的n个记录个记
23、录的关键字的关键字尽可能唯一尽可能唯一地转换成地转换成0m1范围的数值,即范围的数值,即对集合中的任意关键字对集合中的任意关键字key有有0H(key)m1。9.3.1 什么是哈希表n例例1:u若将学生信息按如下方式存入计算机,如:若将学生信息按如下方式存入计算机,如:l将将2001011810201的所有信息存入的所有信息存入A01单元;单元;l将将2001011810202的所有信息存入的所有信息存入A02单元;单元;l将将2001011810231的所有信息存入的所有信息存入A31单元。单元。n则:则:u欲查找学号为欲查找学号为2001011810216的信息,的信息,l便可直接访问便可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 查找
限制150内