由于查找运算的使用频率很高解读课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《由于查找运算的使用频率很高解读课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 由于 查找 运算 使用 频率 解读 课件
- 资源描述:
-
1、 由于查找运算的使用频率很高,几乎在任何一个计算机系统软件和应用软件中都会涉及到,所以当问题所涉及的数据量相当大时,查找方法的效率就显得格外重要。在一些实时查询系统中尤其如此。因此,本章将系统地讨论各种查找方法,并通过对它们的效率分析来比较各种查找方法的优劣。一般,假定被查找的对象是由一组结点组成的一般,假定被查找的对象是由一组结点组成的表表(Table)或文件,而每个结点则由若干个数据或文件,而每个结点则由若干个数据项组成。并假设每个结点都有一个能惟一标识该项组成。并假设每个结点都有一个能惟一标识该结点的关键字。结点的关键字。查找查找(Searching)的定义是:给定一个值的定义是:给定一
2、个值K,在在含有含有n个结点的表中找出关键字等于给定值个结点的表中找出关键字等于给定值K的结的结点。若找到,则查找成功,返回该结点的信息或点。若找到,则查找成功,返回该结点的信息或该结点在表中的位置;否则查找失败,返回相关该结点在表中的位置;否则查找失败,返回相关的指示信息。的指示信息。1.动态查找表和静态查找表 若在查找的同时对表做修改操作(如插入和删除),则相应的表称之为动态查找表。否则称之为静态查找表。2.内查找和外查找和排序类似,查找也有内查找和外查找之分。若整个查找过程都在内存进行,则称之为内查找;反之,若查找过程中需要访问外存,则称之为外查找。查找运算的主要操作是关键字的比较,所以
3、通常把查找过程中对关键字需要执行的 平均比较次数(也称为平均查找长度)作为衡量一个查找算法效率优劣的标准。(平均查找长度 ASL(Average Search Length)定义为:niiicpASL1n是结点的个数;Pi是查找第i个结点的概率。若不特别声明,认为每个结点的查找概率相等,即 pl=p2=pn=1/nci是找到第i个结点所需进行的比较次数。typedef int KeyType;/KeyType应由用户定义 基本思想是:从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键字和给定值K相比较。若当前扫描到的结点关键字与K相等,则查找成功;若扫描结束后,仍未找到关键字等于K的结点,
4、则查找失败。顺序查找方法既适用于线性表的顺序存储结构,也适用于线性表的链式存储结构(使用单链表作存储结构时,扫描必须从第一个结点开始)。(1)类型说明 typedef struct KeyType key;InfoType otherinfo;/此类型依赖于应用 NodeType;typedef NodeType SeqListn+1;/0号单元用作哨兵 int SeqSearch(Seqlist R,KeyType K)/在顺序表R1.n中顺序查找关键字为K的结点,/成功时返回找到的结点位置,失败时返回0 int i;R0.key=K;for(i=n;Ri.key!=K;i-);/从表后往前
5、找 return i;/若i为0,表示查找失败,否则Ri是要找的结点 /SeqSearch 1 2 3+.+n=(1+n)/2约等于表长的一半找不到?n+11528329766145iiiiiii算法中监视哨算法中监视哨R0的作用的作用 为了在for循环中省去判定防止下标越界的条件i1,从而节省比较的时间。成功时的顺序查找的平均查找长度:成功时的顺序查找的平均查找长度:在等概率情况下,pi=1/n(1in),故成功的平均查找长度为 (n+2+1)/n=(n+1)/2 即查找成功时的平均比较次数约为表长的一半。若K值不在表中,则须进行n+1次比较之后才能确定查找失败。算法简单,但效率不高。1、二
6、分查找、二分查找(BinarySearch)二分查找又称折半查找,它是一种效率较高的查找方法。二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。不妨设有序表是递增有序的。low high mid=(low+high)/2if(amid=k)表示找到121619 22 25 33 40 48 52 65 70 83lmhmlhmh二分查找的基本思想是:(设Rlow.high是当前的查找区间)(1)首先确定该区间的中点位置:mid=(high+low)/2;(2)然后将待查的K值与Rmid.key比较:若相等,则查找成功并返回此位置,否则须确定新的查找区间,继续二
7、分查找,具体方法如下:若Rmid.keyK,则由表的有序性可知Rmid.n.keys均大于K,因此若表中存在关键字等于K的结点,则该结点必定是在位置mid左边的子表R1.mid-1中,故新的查找区间是左子表R1.mid-1。类似地,若Rmid.keyK,则要查找的K必在mid的右子表Rmid+1.n中,即新的查找区间是右子表Rmid+1.n。下一次查找是针对新的查找区间进行的。int BinSearch(SeqList R,KeyType K)/在有序表R1.n中进行二分查找,成功时返回结点的位置,失败时返回零 int low=1,high=n,mid;/置当前查找区间上、下界的初值 whil
8、e(lowK)high=mid-1;/继续在Rlow.mid-1中查找 else low=mid+1;/继续在Rmid+1.high中查找 return 0;/当lowhigh时表示查找区间为空,查找失败 /BinSeareh ASL=log2(n+1)n=10000条记录;ASL=5000次 log210000=1551218213545507890012345678432313234 2、分块查找的基本思想、分块查找的基本思想分块查找的基本思想是:(1)首先查找索引表索引表是有序表,可采用二分查找或顺序查找,以确定待查的结点在哪一块。(2)然后在已确定的块中进行顺序查找 由于块内无序,只能
9、用顺序查找。l s l/s(l/s+1)/2+(s+1)/2 y=(l/x+x)/2+120 0840 41260 119182820343043475452131315232533334555lls (1)平均查找长度ASL分块查找是两次查找过程。整个查找过程的平均查找长度是两次查找的平均查找长度之和。以二分查找来确定块,分块查找成功时的平均查找长度 ASLblk=ASLbn+ASLsqlg(b+1)-1+(s+1)/2lg(n/s+1)+s/2以顺序查找确定块,分块查找成功时的平均查找长度 ASLblk=(b+1)/2+(s+1)/2=(s2+2s+n)/(2s)动态查找 二叉排序树(Bi
10、nary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree)。其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树:若它的左子树非空,则左子树上所有结点的值均小于根结点的值;若它的右子树非空,则右子树上所有结点的值均大于根结点的值;左、右子树本身又各是一棵二叉排序树。上述性质简称二叉排序树性质(BST性质),故二叉排序树实际上是满足BST性质的二叉树。由BST性质可得:(1)二叉排序树中任一结点x,其左(右)子树中任一结点y(若存在)的关键字必小(大)于x的关键字。(2)二叉排序树中,各结点关键字是惟一的。346573184232p=NULLf typed
展开阅读全文