计算机软件ds,[计算机软件及应用]DS08-查找.ppt

[计算机软件及应用]DS08-查找

8.1查找的基本概念 查找(Searching)的定义是:在含有n条记录的表(文件)中找出关键字等于给定值K的记录。若找到,则查找成功,返回该记录的信息或该记录在表(文件)中的位置;否则查找失败,返回相关的指示信息。 若在查找的同时对表做修改操作(如插入和删除等),则相应的表称之为动态查找表(Dynamic Search Table)。否则称之为静态查找表(Static Search Table)。 若整个查找过程都在内存进行,则称之为内查找;反之,若查找过程中需要访问外存,则称之为外查找 二分查找又称折半查找,它是一种效率较高的查找方法。 二分查找要求:要求线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。不妨设有序表是递增有序的。 例:设算法的输入实例中有序的关键字序列为:5,13,19,21,37,56,64,75,80,88,92。查找的关键字K=21 第一步:这里的n=11,mid=(1+11)/2=6 05,13,19,21,37,56,64,75,80,88,92 二分查找判定树的组成 二分查找的平均查找长度 二分查找成功时的平均查找长度为:ASLbn≈log2(n) 二分查找在查找失败时所需比较的关键字个数不超过判定树的深度,在最坏情况下查找成功的比较次数也不超过判定树的深度。即为: 二分查找的优点和缺点 虽然二分查找的效率高,但是要将表按关键字排序(有序表)。 二分查找只适用顺序存储结构。为保持表的有序性,在顺序结构里插入和删除都必须移动大量的结点。 三、分块查找(索引顺序查找 ) 分块查找表存储结构 分块查找的特点是:按表内记录的某种属性把表(文件)分成b个块(子表),并建立一个相应的“索引表”,索引表中每个元素对应一个块,而在索引表中是按其关键字有序,但是每一块中的记录的存放是任意的,块与块之间必须是有序的。即分块查找的前提是:文件由”分块有序”的线性表和索引表组成。 算法分析 分块查找是两次查找过程。整个查找过程的平均查找长度是两次查找的平均查找长度之和。 以二分查找来确定块,分块查找成功时的平均查找长度(在索引表中用二分查找,在块内用顺序查找) ASLblk= ASLbn+ASLsq≈log2(b+1)-1+(s+1)/2≈log2(n/s+1)+s/2 以顺序查找确定块,分块查找成功时的平均查找长度 ASL’blk=(b+1)/2+(s+1)/2=(s2+2s+n)/(2s) ①在表中插入或删除一个记录时,只要找到该记录所属的块,就在该块内进行插入和删除运算。 ②因块内记录的存放是任意的,所以插入或删除比较容易,无须移动大量记录。 8.3 树表的查找 1、二叉排序树的定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree)。其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树: (1)若它的左子树非空,则左子树上所有结点的值均小于根结点的值; (2)若它的右子树非空,则右子树上所有结点的值均大于根结点的值; (3)左、右子树本身又各是一棵二叉排序树。 (1) 二叉排序树中任一结点x,其左(右)子树中任一结点y(若存在)的关键字必小(大)于x的关键字。 (2) 二叉排序树中,各结点关键字是惟一的。 (3) 按中序遍历该树所得到的中序序列是一个递增有序序列。 二叉排序树的存储结构 typedef int KeyType; typedef struct node { KeyType key; /*关键字类型*/ infoType otherinfo; /*结点其它信息类型*/ struct node *lchild,*rchild; } BSTNode; /*二叉排序树的结点类型*/ typedef BSTNode *BSTree; 在二叉排序树中插入新结点,要保证插入后仍满足BST性质。其插入过程是: 1)若二叉排序树T为空,则为待插入的关键字key申请一个新结点,并令其为根; 2)若二叉排序树T不为空,则将key和根的关键字比较: (a)若二者相等,则说明树中已有此关键字key,无须插入。 (b)若keyT→key,则将它插入根的右子树中。 二叉排序树插入新结点的算法 void InsertBST(BSTree Tptr,Keytype key) BSTNode *f,*p=Tptr;

相关资源:世新砸蛋抽奖软件V2.3.10官方安装版-其它代码类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月10日
下一篇 2021年6月10日

相关推荐