第九章 查找.ppt
《第九章 查找.ppt》由会员分享,可在线阅读,更多相关《第九章 查找.ppt(85页珍藏版)》请在麦多课文档分享上搜索。
1、Data Structure,第九章 查找,9.1 静态查找表9.1.1 顺序表的查找9.1.2 有序表的查找 9.2 动态查找表9.2.1 二叉排序树和二叉平衡树9.2.2 B-树 9.3 哈希(Hashing)表(散列表),Data Structure,一、教学目的与要求了解查找的基本概念和基本方法,掌握常用查找的算法 二、主要教学内容顺序查找和二分查找;索引查找和分块查找;散列查找;B树查找 三、教学重点、难点顺序查找和二分查找、索引查找和分块查找 四、授课方法及手段采用多媒体大屏幕投影授课 五、讲课具体内容(讲稿),Data Structure,第九章 查找,查找表 (search t
2、able):同一类型数据元素构成的集合。 查找操作: (1)查询某个“特定的”数据元素是否在查找表中; (2)检索某个“特定的”数据元素的各种属性; (3)在查找表中插入一个数据元素; (4)从查找表中删除某个数据元素. 静态查找表:对查找表只作(1)、(2)操作; 动态查找表:可以对查找表作(1)-(4)操作。,Data Structure,有关查找的“词”的含义,关键字(KEY): 数据元素(或记录)的某个数据项的值,用以标识一个数据元素(或记录)。 可以唯一标识一个记录的关键字称为主关键字(Primary Key);否则称为次关键字(Secondary Key)。 查找(Searchin
3、g) 根据给定的值,在查找表中确定一个关键字等于给定值的记录或数据元素。 查找可能是成功的,也可能是不成功的。,Data Structure,9.1 静态查找表,可以用顺序表,也可以用线性链表来表示静态查找表顺序表的查找 /静态查找表的顺序存储结构 typedef struct ElemType *elem; /0号单元未用int length; SSTable;,Data Structure,监视哨,使用了监视哨,在查找过程中,不用每一步都去判断查找是否结束。 找到:返回元素在线性表中的存储位置; 未找到:返回0。,Data Structure,int Search_seq (SSTable
4、 ST, KeyType key) ST.elem0.key=key;for (I=st.length; !EQ(st.elemI.key,key); -I); /从表尾往前查return i; /Search_Seq,顺序查找算法:,Data Structure,根据上述算法可知:查找成功时的平均查找次数为:ASL=(1+2+3+4+n)/n=(n+1)/2查找不成功时的比较次数为: n+1则顺序查找的平均查找长度为:ASL = (n+1)/2+n+1)/2=(n+1)3/4,顺序查找的优点:算法简单,无需排序,采用顺序和链式存储均可。 顺序查找的缺点:平均查找长度较大。,Data Stru
5、cture,9.1.2 有序表的查找(折半查找、二分法查找),分三种情况: 1)若中间项的值等于x,则说明已查到。 2)若x小于中间项的值,则在线性表的前半部分查找; 3)若x大于中间项的值,则在线性表的后半部分查找。 特点:比顺序查找方法效率高。最坏的情况下,需要比较log2n次。,思想:先确定待查找记录所在的范围,然后逐步缩小范围,直到找到或确认找不到该记录为止。 前提:必须在具有顺序存储结构的有序表中进行。,Data Structure,查找21的过程如下图(mid=(low+high)/2不进位取整),(05, 13, 19, 21, 37, 56, 64, 75, 80, 88 92
6、),1 2 3 4 5 6 7 8 9 10 11,(05, 13, 19, 21, 37, 56, 64, 75, 80, 88 92),(05, 13, 19, 21, 37, 56, 64, 75, 80, 88 92),(05, 13, 19, 21, 37, 56, 64, 75, 80, 88 92),Data Structure,查找85的过程如下图(mid=(low+high)/2不进位取整),1 2 3 4 5 6 7 8 9 10 11,(05, 13, 19, 21, 37, 56, 64, 75, 80, 88 92),(05, 13, 19, 21, 37, 56,
7、64, 75, 80, 88 92),(05, 13, 19, 21, 37, 56, 64, 75, 80, 88 92),(05, 13, 19, 21, 37, 56, 64, 75, 80, 88 92),Data Structure,折半查找算法: int Search_Bin( SSTable ST, KeyType key) low=1; high=ST.length;while (low=high) mid=(low+high)/2;if EQ(key,ST.elemmid.key) return mid; /查找成功else if LT(key,ST.elemmid.key)
8、 high=mid-1; /在前半区间继续查找else low=mid+1; /在后半区间继续查找 /End whilereturn (0); /查找不成功 /End,Data Structure,折半查找的性能分析,判定树上每个结点需要的查找次数刚好为该结点所在的层数;,查找成功时查找次数不会超过判定树的深度;,n个结点的判定树的深度为 log2n+1;,折半查找的算法复杂度为log2n+1。,判定树:用树来表示查找过程,树中每个结点表示表中一个记录,结点中的值为该记录在表中的位置。 查找上例中所有元素的二叉判定树为:,Data Structure,是顺序查找的一种改进方法,就是把被查找的表
9、分成若干块,每块中记录的存放顺序是无序的,但块与块之间必须按关键字有序。即第一块中任一记录的关键字都小于第二块中任一记录的关键字,而第二块中任一记录的关键字都小于第三块中任一记录的关键字,依此类推。该法要为被查找的表建立一个索引表,索引表中的一项对应于表中的一块,索引表中含有这一块中的最大关键字和指向块内第一个记录位置的指针,索引表中各项关键字有序。,9.1.4 索引顺序表查找(分块查找),Data Structure,索引表,块中的最大关键字,块内第一个记录位置的指针,Data Structure,分块查找步骤:,查索引表,确定要找的记录在哪一块。(方法1:顺序查找;方法2:折半查找) 2.
10、 在相应的块中查找(顺序查找)。,例如,要找关键字为22的记录。由索引的第一项可知,要找的记录要么在第二块中,要么不存在。并获取第二块中第一个记录的位置。,Data Structure,思考:,上例中,15个数据分成3块查找,与15个数据分成5块查找,效率哪个高? 如有900个数据,如何分块才能实现查找效率和空间效率的最优?答:分成30块,每块30个数据,Data Structure,9.2 动态查找表,什么是二叉排序树(Binary Sort Tree) ?二叉排序树是空树,或者是具有以下性质的二叉树: (1)若左子树非空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树非空,则右
11、子树上所有结点的值均大于它的根结点的值;(3)它的左、右子树也分别为二叉排序树。,9.2.1 二叉排序树,Data Structure,二叉排序树举例,查找过程:从根结点出发,结点的值与key进行比较: (1)相等时查找成功; (2)key较大时,沿右子树继续查找(无右子树则查找失败); (3)key较小时,沿左子树继续查找(无左子树则查找失败)。,其中序遍历序列为: 3,12,24,37,45,53,61,78,90,100,Data Structure,算法9.5(a):二叉排序树递归查找算法1,BiTree SearchBST(BiTree T, keyType key) /在根指针T所
12、指二叉排序树中递归查找Key,若查找成功,返回指向该结点的指针,否则返回空指针。if (!T) | EQ(key,T-data.key) return(T); /查找结束else if LT(key,T-data.key) return(SearchBST(T-lchild,key); /在左子树中继续查找else return(SearchBST(T-rchild,key);/在右子树中继续查找 /SearchBST,Data Structure,二叉排序树的生成(插入结点), 10、18、3、8、12、2、7、5 ,10,10,18,3,8,12,2,7,5,Data Structure,
13、算法9.5(b):二叉排序树递归查找算法2,BiTree SearchBST(BiTree T, keyType key,BiTree f,Bitree /在右子树中继续查找 /SearchBST,Data Structure,算法9.5(c):二叉排序树非递归查找算法,BiTree SearchBST(BiTree T, keyType key, Bitree /查找不成功 /SearchBST,Data Structure,算法9.6:二叉排序树结点插入算法,BiTree Insert BST(BiTree /树中已有此关键字,不再插入 /Insert BST,Data Structure
14、,二叉排序树结点的删除 (保持二叉排序树的特性及次序),设被删除的结点为*p,其父结点为*f, 假设*p为*f的左孩子,则:(1)若*p为叶结点,即PL和PR均为空.直接删除不会影响树结构;,If (f-Lchild = = p)f-Lchild = NULL; Elsef-Rchild = NULL; free(p);,Data Structure,(2)若*p只有PL或只有PR,只要令PL或PR直接成为其双亲结点*f的左孩子即可,这样也不会影响树结构;,If (p-Lchild != NULL)f-Rchild = p-Lchild; Elsef-Rchild = p-Rchild; fr
15、ee(p);,Data Structure,(3)若*p有PL也有PR,为保持中序遍历二叉树的序列不变,可以有两种处理方法: 其一是令PL为*f的左子树,PR为*s的右子树(*s为中序遍历PL的最后一个结点); 其二是令*p的直接前驱(或直接后继)*s替代*p,然后删除直接前驱(或直接后继)*s.若*s有左孩子则左孩子取代*s的位置.这样虽然影响了树结构,但不会影响中序遍历二叉树时的结点次序。,Data Structure,在二叉排序树中删除结点*p,方法1,方法2,Data Structure,算法9.7:二叉排序树结点删除算法,BiTree DeleteBST(BiTree /end el
16、se /DeleteBST,Data Structure,算法9.8(注意:教材程序有错),Void Delete(BiTree /重接*q的左子树/end else /Delete,f-lchild=q;,f-lchild=q;,free(s);,Data Structure,二叉排序树的查找分析,n个结点的二叉排序树的平均查找长度和树的形态有关。例:45,24,53,45,12,37,93 最坏情况是二叉排序树蜕变单支树:12,24,37, 45,53,93,ASL = O(log2n),ASL = O(n/2),Data Structure,二叉排序树举例,已知如下所示长度为12的字符串
17、表(Jan,Fab,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec)(1)试按表中元素的顺序依次插入一棵初始为空的二叉排序树,画出插入完成之后的二叉排序树,并求其在等概率的情况下查找成功的平均查找长度ASL;(2)若对表中元素先进行排序构成有序表,求其在等概率的情况下对此有序表进行折半查找时查找成功的平均查找长度;,Data Structure,二叉排序树举例1,(Jan,Fab,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec),在等概率(1/12)的情况下查找成功的平均查找长度:,ASL=(1+2*2+3*3+4*3+5
18、*2+6*1)/12= 42/12 = 3.5,二叉排序树,Data Structure,July,Dec,Apr,May,June,Oct,Feb,Nov,Dec,判定树,Jan,Aug,Aug,二叉排序树举例2,(Apr,Aug,Dec,Fab,Jan,July,June,Mar,May,Nov,Oct,Sep),其在等概率(1/12)的情况下查找成功的平均查找长度:,ASL=(1+2*2+3*4+4*5)/12 = 37/12 = 3.1,Data Structure,平衡二叉树,什么是平衡二叉树(Balanced Binary Tree) ?平衡二叉树是空树,或者是具有以下性质的二叉树
19、: 它的左子树和右子树也都是平衡二叉树 且左子树和右子树的深度之差的绝对值不超过1 结点的平衡因子BF(Balance Factor)是 左子树的深度减去右子树的深度,它只可能是-1、0、1 平衡二叉树(也称AVL树)的深度为O(log2N)(其中N为结点个数) 它的平均查找长度也是O(log2N),Data Structure,平衡二叉树及平衡因子举例,平衡的二叉树,Data Structure,不平衡的二叉树,不平衡二叉树及平衡因子举例,Data Structure,二叉排序树转成平衡树示例 设关键字序列为(13,24,37,90,53),Data Structure,二叉排序树转成平衡树
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九 查找 PPT
