查找在计算机信息处理.ppt课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《查找在计算机信息处理.ppt课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 查找 计算机 信息处理 ppt 课件
- 资源描述:
-
1、第八章 查找 查找在计算机信息处理、数据库查询等方面均有广泛的应用。查找算法的优劣和能否针对不同要求来选用恰当的查找算法,直接影响到查找效率。在一个数据集合中进行查找所使用的方法与该数据集合的存储结构密切相关。查找的基本概念线性表的查找树表的查找哈希表及其查找小结 over查找的基本概念 查找就是在数据元素(记录)集合中找出“满足查找要求”的数据元素(记录)。查找表(search table)-指同一类型的记录构成的集合。关键字(key)-记录中某个数据项的值,用它可以识别、确定一个记录。主关键字(primary key)-指查找表中能唯一地确定一个记录的关键字。next 次关键字(secon
2、dary key)-指查找表中能够确定多个记录的关键字。查找(searching)-给定一个确定的值,在查找表中确定一个记录,其相应的关键字等于给定值的操作。查找的结果有两种:查找成功和查找失败。查找表分为:静态查找表和动态查找表两种。静态查找表-指只查询给定记录是否存在于表中或检索某个特定记录的有关属性。动态查找表-除上之外,还可以对表进行插入、删除或修改操作。next 基于比较的查找算法的执行时间取决于给定值和关键字的比较次数,通常以比较次数的平均值作为衡量算法的依据,称其为算法在查找成功时的平均查找长度(Average Search Length,简记为ASL)。若查找表有n个记录,则
3、其中:pi位在查找表中查找第i个记录的概率niiipcASL1back线性表的查找 说明:本节讨论的是数组实现的顺序表 记录结构:typedef struct int key;NODE;顺序表下的三种查找方法:顺序查找折半查找分块查找back顺序查找(sequential search)方法:从顺序表的一端开始,将给定值依次与数组中各个记录的关键字进行比较,若在表中找到某个记录的key与给定值相等,则查找成功,返回记录所在下标;若查找失败则给出失败信息。适用:顺序表中记录的关键字无序的情况。基本算法8-1 改进算法8-2 性能分析back 算法8-1 p163 int search(NODE
4、a,int n,int k)int i=0;while(i=n)return-1;else return i;back 顺序查找的基本操作是关键字的比较。查找成功的最好情况是第一个记录就是所查,比较一次即可;查找成功最坏的情况是第n个记录符合要求,进行n次比较。若查找概率相等,即pi=1/n,则顺序查找成功的平均查找长度为:对算法8-2,查找不成功的比较次数为n+1,顺序查找算法的时间复杂度为O(n)。niniiinninpcASL112211back折半查找(binary search)(二分查找)适用:查找表中记录关键字值有序。查找过程:(顺序表记录关键字升序排列)设low、mid、hig
5、h指向表当前待查范围的下、中和上界。初始:给定查找值为k,low=0,high=n-1,mid=比较,若k=amid.key,成功;若kamid.key,令low=mid+1,继续查找;比较,若lowhigh,重复执行,否则查找完毕,若无满足记录则查找失败。2/)(highlow next搜索成功的例子搜索成功的例子 搜索失败的例子搜索失败的例子next 例8-1 顺序表8,11,18,28,45,55,63,80,用折半查找的方法查找55和22的记录。查找55过程:初始low=0,high=7,mid=(0+7)/2=3 下标 0 1 2 3 4 5 6 7 low mid high 比较,
6、(k=55)(amid.key=28),令low=mid+1=4,high=7,mid=(4+7)/2=5 下标 0 1 2 3 4 5 6 7 low mid high 比较,(k=55)=(amid.key=55),查找成功,返回5811 18 28 45 55 63 80811 18 28 45 55 63 80next 算法8-3 p166 int Binary_Search(NODE a,int n,int k)int low=0,high=n-1,mid;while(low=high)mid=(low+high)/2;if(amid.key=k)return mid;else if
7、(amid.keyk)low=mid+1;eles high=mid-1;return-1;next 折半查找过程可用一棵二叉树表示:树中每个结点对应于查找表中一个记录,结点值为相应记录在查找表中的位置值,根结点值是查找表中间元素下标;左子树结点是key中间元素的右子表,右子树的根结点是右子表的中间元素的下标 依此类推得到相应的判定树。next从有序表构造出的判定树next 在等概率条件下,可求得成功查找的平均查找长度。例:上图ASL=(1+2*2+3*4+4*2)/9=25/93 当查找成功时,最好情况是比较1次。查到每个记录的比较次数=该结点在判定树中的深度。折半查找算法的时间复杂度为O(
8、log2n)。back分块查找(索引顺序查找)是顺序查找的一种改进,在分块查找时,把表内记录按某种属性分成n(1)个块(子表),且块间有序,即后一块中所有记录key值前一块重所有记录key值,而块内key值可以无序。建立一相应“索引表”,由若干索引记录组成,每个索引记录对应一个块。索引记录包括两个数据项:对应块内最大key值和块中第一个记录位置的地址指针。next 分块查找的步骤:对索引表进行查找以确定给定值所在的块,因为索引表有序,可用顺序查找或折半查找;在确定的块中查找给定的值,块内不一定有序,所以一般用顺序查找。例:子表数据分开存储next 例8-2 线性表16,22,5,11,66,3
9、8,62,88,1009个元素,用分块查找法查找66的数据元素。索引表 块内最大关键字值 块的起始地址 下标 0 1 2 3 4 5 6 7 8 线性表分为3块,每块3个元素。给定值k=66,与索引表中各块内最大key值比较,100k62,可判定在第三块中查找,直至成功或失败。1662100036165112238626688 100back树表的查找 树表查找是指查找表用二叉树表示,存储结构采用二叉链表,链表中每个结点对应查找表中一个记录。二叉排序树的定义 二叉排序树的查找 二叉排序树的插入和删除back二叉排序树(binary sort tree)的定义 或者是一棵空树,或者具有下列性质的
10、二叉树:若它的左子树非空,则在左子树的所有结点的值都小于它的根结点的值;若它的右子树非空,则在右子树的所有结点的值都大于等于根结点的值;左右子树也分别是一棵二叉排序树。简而言之,二叉排序树每个结点的值都大于它的左子树上的所有结点的值,而小于等于它的右子树上所有结点的值。对二叉排序树进行中序遍历即可得到从小到大的有序序列。back二叉排序树的查找 具体做法:当二叉排序树非空时,将给定值k与根的key比较,若相等则表示查找成功;否则,若kkey!=k)if(kkey)p=p-left;else p=p-right;if(!p)break;return p;back二叉排序树的插入和删除 按照一定规
11、则在二叉排序树上插入、删除结点仍能保持二叉排序树的性质。只要解决了插入问题,也就解决了建树过程,因为建树过程就是从空树开始逐次插入新结点的过程。用二叉排序树插入算法生成的二叉排序树,其形状、高度不仅依赖于关键字值的大小和数量,还与记录输入的先后次序有关系。next 插入的具体做法:动态生成一新结点p,若二叉排序树root为空,则作为根结点插入;若非空,则比较,若p-keykey则插入左子树,否则插入右子树。在左或右子树上进行同样的操作,实际是一个递归的过程。最后p的插入位置是二叉排序树中某结点的空指针位置。新结点p是作为叶结点插入,所以新结点插入时其左右子指针均为NULL。next 算法8-5
展开阅读全文