九章节检索.ppt
《九章节检索.ppt》由会员分享,可在线阅读,更多相关《九章节检索.ppt(138页珍藏版)》请在三一办公上搜索。
1、第九章 检索,任课教员:张 铭http:/,北京大学信息学院 版权所有,转载或翻印必究 Page 2,9.1 基本概念9.2 线性表的检索9.3 散列表的检索,北京大学信息学院 版权所有,转载或翻印必究 Page 3,基本概念,检索:在一组记录集合中找到关键码值等于给定值的某个记录,或者找到关键码值符合特定条件的某些记录的过程检索的效率非常重要尤其对于大数据量需要对数据进行特殊的存储处理,北京大学信息学院 版权所有,转载或翻印必究 Page 4,基本概念(续),预排序排序算法本身比较费时只是预处理(在检索之前已经完成)建立索引检索时充分利用辅助索引信息牺牲一定的空间从而提高检索效率,北京大学信
2、息学院 版权所有,转载或翻印必究 Page 5,基本概念(续),散列技术把数据组织到一个表中根据关键码的值来确定表中每个记录的位置缺点:不适合进行范围查询一般也不允许出现重复关键码当散列方法不适合于基于磁盘的应用程序时,我们可以选择B树方法,北京大学信息学院 版权所有,转载或翻印必究 Page 6,平均检索长度(ASL),关键码的比较检索运算的主要操作平均检索长度(Average Search Length)检索过程中对关键码需要执行的平均比较次数是衡量检索算法优劣的时间标准,北京大学信息学院 版权所有,转载或翻印必究 Page 7,平均检索长度,ASL是存储结构中对象总数n的函数,其定义为:
3、Pi 为检索第i个元素的概率Ci 为找到第i个元素所需的关键码值与给定值的比较次数,北京大学信息学院 版权所有,转载或翻印必究 Page 8,平均检索长度,假设线性表为(a,b,c)检索a、b、c的概率分别为0.4、0.1、0.5顺序检索算法的平均检索长度为0.41+0.12+0.53=2.1即平均需要2.1次给定值与表中关键码值的比较才能找到待查元素,北京大学信息学院 版权所有,转载或翻印必究 Page 9,衡量一个检索算法还需要考虑算法所需的存储量算法的复杂性.,北京大学信息学院 版权所有,转载或翻印必究 Page 10,9.1 基于线性表的检索,9.1.1 顺序检索9.1.2 二分检索9
4、.1.3 分块检索,北京大学信息学院 版权所有,转载或翻印必究 Page 11,9.1.1 顺序检索,针对线性表里的所有记录,逐个进行关键码和给定值的比较。若某个记录的关键码和给定值比较相等,则检索成功;否则检索失败(找遍了仍找不到)。存储:可以顺序、链接排序要求:无,北京大学信息学院 版权所有,转载或翻印必究 Page 12,顺序检索算法,/代码9-1 顺序检索的存储结构类型定义 template class Item public:Item(Type value):key(value)Type getKey()return key;/获取关键码值;void setKey(Type k)ke
5、y=k;/设置关键码private:Type key;/关键码域string other;/其它域;vector*dataList;,北京大学信息学院 版权所有,转载或翻印必究 Page 13,“监视哨”顺序检索算法,位置0用来做监视哨,位置1到length用来存储实际元素检索成功时返回元素位置,检索失败时统一返回0;/代码9-2 顺序检索算法 template int SeqSearch(vector*/返回元素位置,北京大学信息学院 版权所有,转载或翻印必究 Page 14,顺序检索性能分析,检索成功假设检索每个关键码是等概率的,Pi=1/n检索失败假设检索失败时都需要比较n+1次(设置了
6、一个监视哨),北京大学信息学院 版权所有,转载或翻印必究 Page 15,顺序检索性能分析(续),平均检索长度假设检索成功的概率为p,检索失败的概率为q=(1-p),则平均检索长度为(n+1)/2 ASL(n+1)优缺点优点:插入元素可以直接加在表尾(1)缺点:检索时间太长(n),北京大学信息学院 版权所有,转载或翻印必究 Page 16,9.1.2 二分检索法,有序表:线性表中所有数据元素按关键码值递增(或递减)的次序排列 在有序表的存储表示下,检索可以用效率更高的二分检索法实现。,北京大学信息学院 版权所有,转载或翻印必究 Page 17,9.1.2 二分法检索,有序表中所有元素按关键码值
7、递增(或递减)的次序排列将表中任一元素dataListi的关键码值Key与给定值K比较,可根据三种比较结果区分出三种情况(以递增为例):(1)Key=K,检索成功,dataListi即为待查元素(2)Key K,说明待查元素若在表中,且一定排在dataListi之前(3)Key K,说明待查元素若在表中,且一定排在dataListi之后因此,在一次比较之后,若没有找到待查元素(即情况1未出现),则可根据比较结果缩小进一步检索的区间,北京大学信息学院 版权所有,转载或翻印必究 Page 18,二分法检索算法,/代码9-3 二分检索算法 template int BinSearch(vector*
8、/检索失败,返回0,北京大学信息学院 版权所有,转载或翻印必究 Page 19,检索关键码18。low=1;high=9;K=18第一次:mid=5;array5=3518 high=4;(low=1)第二次:mid=2;array2=1718 low=3;(high=4)第三次:mid=3;array3=18=18 mid=3;return 8,二分法检索图示,北京大学信息学院 版权所有,转载或翻印必究 Page 20,二分法检索性能分析,最大检索长度为 失败的检索长度是 或,北京大学信息学院 版权所有,转载或翻印必究 Page 21,二分法检索性能分析(续),成功的平均检索长度为:(n 5
9、0)优缺点优点:平均检索长度与最大检索长度相近,检索速度快缺点:要排序、顺序存储,不易更新(插/删),北京大学信息学院 版权所有,转载或翻印必究 Page 22,9.1.3 分块检索,顺序与二分法的折衷既有较快的检索又有较灵活的更改,北京大学信息学院 版权所有,转载或翻印必究 Page 23,分块检索思想,“按块有序”设线性表中共有n个数据元素,将表分成b块不需要均匀每一块可能不满每一块中的关键码不一定有序但前一块中的最大关键码必须小于后一块中的最小关键码,北京大学信息学院 版权所有,转载或翻印必究 Page 24,索引表各块中的最大关键码及各块起始位置可能还需要块中元素个数(每一块可能不满)
10、索引表是一个递增有序表由于表是分块有序的,北京大学信息学院 版权所有,转载或翻印必究 Page 25,分块检索分两个阶段,(1)确定待查元素所在的块(2)在块内检索待查的元素,北京大学信息学院 版权所有,转载或翻印必究 Page 26,分块检索索引顺序结构,索引表中每个索引项有两个域块内最大关键码块起始位置,北京大学信息学院 版权所有,转载或翻印必究 Page 27,分块检索性能分析,分块检索为两级检索先在索引表中确定待查元素所在的块;设在索引表中确定块号的时间开销是ASLb然后在块内检索待查的元素。在块中查找记录的时间开销为ASLwASL(n)=ASLb+ASLw,北京大学信息学院 版权所有
11、,转载或翻印必究 Page 28,分块检索性能分析(续1),索引表是按块内最大关键码有序的,且长度也不大,可以二分检索,也可以顺序检索各子表内各个记录不是按记录关键码有序,只能顺序检索,北京大学信息学院 版权所有,转载或翻印必究 Page 29,分块检索性能分析(续2),假设在索引表中用顺序检索,在块内也用顺序检索 当s=时,ASL取最小值,ASL=+1,北京大学信息学院 版权所有,转载或翻印必究 Page 30,分块检索性能分析(续3),当n=10,000时顺序检索5,000次二分法检索14次分块检索100次如果数据块(子表)存放在外存时,还会受到页块大小的制约此时往往以外存一个/读取的数据
12、(一页)作为一块,北京大学信息学院 版权所有,转载或翻印必究 Page 31,分块检索性能分析(续4),若采用二分法检索确定记录所在的子表,则检索成功时的平均检索长度为ASL=ASLb+ASLw log2(b+1)-1+(s+1)/2 log2(1+n/s)+s/2,北京大学信息学院 版权所有,转载或翻印必究 Page 32,分块检索的优缺点,优点:插入、删除相对较易没有大量记录移动缺点:增加一个辅助数组的存储空间初始线性表分块排序当大量插入/删除时,或结点分布不均匀时,速度下降,北京大学信息学院 版权所有,转载或翻印必究 Page 33,9.2 散列检索,基于关键码比较的检索 顺序检索,=,
13、!=二分法、树型,=,检索是直接面向用户的操作当问题规模n很大时,上述检索的时间效率可能使得用户无法忍受最理想的情况根据关键码值,直接找到记录的存储地址不需要把待查关键码与候选记录集合的某些记录进行逐个比较,北京大学信息学院 版权所有,转载或翻印必究 Page 34,例如,读取指定下标的数组元素根据数组的起始存储地址、以及数组下标值而直接计算出来的,所花费的时间是O(1)与数组元素个数的规模n无关受此启发,计算机科学家发明了散列方法散列是一种重要的存储方法也是一种常见的检索方法,北京大学信息学院 版权所有,转载或翻印必究 Page 35,散列基本思想,一个确定的函数关系h以结点的关键码K为自变
14、量函数值h(K)作为结点的存储地址检索时也是根据这个函数计算其存储位置通常散列表的存储空间是一个一维数组散列地址是数组的下标,北京大学信息学院 版权所有,转载或翻印必究 Page 36,例9.1:已知线性表关键码集合为:S=and,begin,do,end,for,go,if,repeat,then,until,while可设散列表为:char HT2268;散列函数H(key)的值,取为关键码key中的第一个字母在字母表a,b,c,.,z中的序号,即:H(key)=key0 a,北京大学信息学院 版权所有,转载或翻印必究 Page 37,北京大学信息学院 版权所有,转载或翻印必究 Page
15、38,例9.2:在集合S中增加4个关键码,集合S1=S+else,array,with,up要修改散列函数:散列函数的值为key中首尾字母在字母表中序号的平均值,即:int H3(key)char key;int i;i=0;while(i8)return(key0+key(i-1)2*a)/2),北京大学信息学院 版权所有,转载或翻印必究 Page 39,北京大学信息学院 版权所有,转载或翻印必究 Page 40,负载因子=n/m散列表的空间大小为m填入表中的结点数为n冲突某个散列函数对于不相等的关键码计算出了相同的散列地址在实际应用中,不产生冲突的散列函数极少存在同义词发生冲突的两个关键码
16、,北京大学信息学院 版权所有,转载或翻印必究 Page 41,采用散列技术时需要考虑的两个首要问题是:(1)如何构造(选择)使结点“分布均匀”的散列函数?(2)一旦发生冲突,用什么方法来解决?还需考虑散列表本身的组织方法,北京大学信息学院 版权所有,转载或翻印必究 Page 42,9.2.1 散列函数,散列函数:把关键码值映射到存储位置的函数,通常用h来表示 Address Hash(key),北京大学信息学院 版权所有,转载或翻印必究 Page 43,散列函数的选取原则,运算尽可能简单函数的值域必须在表长的范围内尽可能使得关键码不同时,其散列函数值亦不相同,北京大学信息学院 版权所有,转载或
17、翻印必究 Page 44,需要考虑各种因素,关键码长度散列表大小关键码分布情况记录的检索频率,北京大学信息学院 版权所有,转载或翻印必究 Page 45,常用散列函数选取方法,除余法乘余取整法平方取中法数字分析法基数转换法折叠法ELFhash字符串散列函数,北京大学信息学院 版权所有,转载或翻印必究 Page 46,9.2.1.1 除余法,除余法:用关键码x除以M(往往取散列表长度),并取余数作为散列地址。散列函数为:h(x)x mod M通常选择一个质数作为M值函数值依赖于自变量x的所有位,而不仅仅是最右边k个低位增大了均匀分布的可能性,北京大学信息学院 版权所有,转载或翻印必究 Page
18、47,若把M设置为偶数x是偶数,h(x)也是偶数x是奇数,h(x)也是奇数缺点:分布不均匀如果偶数关键码比奇数关键码出现的概率大,那么函数值就不能均匀分布反之亦然,北京大学信息学院 版权所有,转载或翻印必究 Page 48,若把M设置为2的幂那么,h(x)x mod 2k 仅仅是x(用二进制表示)最右边的k个位(bit)若把M设置为10的幂那么,h(x)x mod 10k 仅仅是x(用十进制表示)最右边的k个十进制位(digital)缺点:散列值不依赖于x的全部比特位,北京大学信息学院 版权所有,转载或翻印必究 Page 49,除余法的潜在缺点连续的关键码映射成连续的散列值虽然能保证连续的关键
19、码不发生冲突但也意味着要占据连续的数组单元可能导致程序性能的降低,北京大学信息学院 版权所有,转载或翻印必究 Page 50,9.2.1.2 乘余取整法,先让关键码 key 乘上一个常数A(0A 1),提取乘积的小数部分然后,再用整数 n 乘以这个值,对结果向下取整,把它做为散列的地址散列函数为:hash(key)=n*(A*key%1)“A*key%1”表示取 A*key 小数部分:A*key%1=A*key-A*key,北京大学信息学院 版权所有,转载或翻印必究 Page 51,乘余取整法示例,设关键码 key=123456,n=10000且取 A=0.6180339,因此有 hash(1
20、23456)=10000*(0.6180339*123456%1)=10000*(76300.0041151%1)=10000*0.0041151=41,北京大学信息学院 版权所有,转载或翻印必究 Page 52,乘余取整法参数取值的考虑,若地址空间为p位,就取n=2p所求出的散列地址正好是计算出来的 A*key%1=A*key-A*key 值的小数点后最左p位值此方法的优点:对 n 的选择无关紧要Knuth认为:A可以取任何值,与待排序的数据特征有关。一般情况下取黄金分割 最理想,北京大学信息学院 版权所有,转载或翻印必究 Page 53,9.2.1.3 平方取中法,此时可采用平方取中法:先
21、通过求关键码的平方来扩大差别,再取其中的几位或其组合作为散列地址例如,一组二进制关键码:(00000100,00000110,000001010,000001001,000000111)平方结果为:(00010000,00100100,01100010,01010001,00110001)若表长为4个二进制位,则可取中间四位作为散列地址:(0100,1001,1000,0100,1100),北京大学信息学院 版权所有,转载或翻印必究 Page 54,9.2.1.4 数字分析法,设有 n 个 d 位数,每一位可能有 r 种不同的符号这 r 种不同的符号在各位上出现的频率不一定相同可能在某些位上分
22、布均匀些,每种符号出现的几率均等在某些位上分布不均匀,只有某几种符号经常出现可根据散列表的大小,选取其中各种符号分布均匀的若干位作为散列地址,北京大学信息学院 版权所有,转载或翻印必究 Page 55,数字分析法(续1),计算各位数字中符号分布的均匀度 k 的公式:其中,表示第 i 个符号在第 k 位上出现的次数,n/r 表示各种符号在 n 个数中均匀出现的期望值。计算出的 k 值越小,表明在该位(第k 位)各种符号分布得越均匀,北京大学信息学院 版权所有,转载或翻印必究 Page 56,9 9 2 1 4 8 位,1=57.60 9 9 1 2 6 9位,2=57.60 9 9 0 5 2
23、7位,3=17.60 9 9 1 6 3 0位,4=5.60 9 9 1 8 0 5位,5=5.60 9 9 1 5 5 8位,6=5.60 9 9 2 0 4 7 9 9 0 0 0 1,若散列表地址范围有 3 位数字,取各关键码的位做为记录的散列地址也可以把第,和第位相加,舍去进位,变成一位数,与第,位合起来作为散列地址。还可以用其它方法,北京大学信息学院 版权所有,转载或翻印必究 Page 57,数字分析法(续3),位,仅9出现8次,1=(8-8/10)21+(0-8/10)2 9=57.6位,仅9出现8次,2=(8-8/10)21+(0-8/10)2 9=57.6 位,0和2各出现两次
24、,1出现4次 3=(2-8/10)22+(4-8/10)2 1+(0-8/10)2 7=17.6位,0和5各出现两次,1、2、6、8各出现1次位,0和4各出现两次,2、3、5、6各出现1次位,7和8各出现两次,0、1、5、9各出现1次 4=5=6=(2-8/10)22+(1-8/10)2 4+(0-8/10)2 4=5.6,北京大学信息学院 版权所有,转载或翻印必究 Page 58,数字分析法(续4),数字分析法仅适用于事先明确知道表中所有关键码每一位数值的分布情况它完全依赖于关键码集合如果换一个关键码集合,选择哪几位数据要重新决定,北京大学信息学院 版权所有,转载或翻印必究 Page 59,
25、9.2.1.5 基数转换法,把关键码看成是另一进制上的数后再把它转换成原来进制上的数取其中若干位作为散列地址一般取大于原来基数的数作为转换的基数,并且两个基数要互素,北京大学信息学院 版权所有,转载或翻印必究 Page 60,例如,给定一个十进制数的关键码是(210485)10,把它看成以13为基数的十三进制数(210485)13,再把它转换为十进制(210485)13=2135+1134+4132+813+5=(771932)10假设散列表长度是10000,则可取低4位1932作为散列地址,北京大学信息学院 版权所有,转载或翻印必究 Page 61,9.2.1.6 折叠法,关键码所含的位数很
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章节 检索
链接地址:https://www.31ppt.com/p-5308786.html