赞
踩
1、顺序查找
(1)无序的线性查找
基本思想:从线性表的一端开始,逐个检查关键字是否满足给定的条件。特点:当N比较大时,查找效率低。
(2)有序的线性查找:查效率比无序查找略高。
2、折半查找
基本思想:折半查找又称二分查找,仅适用于有序的顺序表。将给定的值与表中间位置的元素比较,相等则查找成功;不相等则继续在中间元素以外的前半部分或后半部分继续查找;如此重复,直到找到为止,若没有指定元素,则查找失败。
案例:
3、分块查找
基本思想:吸取了顺序查找和折半查找各自的优点,既有动态结构,又适于快速查找。将表分为若干子块,块内元素可以无序,块之间必须是有序的。
案例:88、24、72、61、21、6、32、11、8、31、22、83、78、54
1、B树
B树:又叫多路平衡查找树,B树种所有结点的孩子个数的最大值称为B树的阶,通常用m表示。B树也是所有结点的平衡因子均等于0的多路平衡查找树。
(1)m叉树的特性:
案例:
(2)B树的高度范围:
(3)B树的用途
使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。这个数据结构一般用于数据库的索引,综合效率较高。
(4)B树的查找
B树的查找:类似二叉排序树的查找,不同的是B树每个结点上是有多个关键字的有序表,在到达某个结点时,先在有序表中查找,若找到,则查找成功;否则,到按照对应的指针信息指向的子树中去查找,当到达叶子结点时,则说明树中没有对应的关键码。
案例:
(4)B树的插入(可能涉及结点的分裂)
案例:3阶B树,假设需依次插入关键字30,26,85。
中。同时将关键字30 和指示节点 d
的指针插入到其双亲的节点中。由于 b节点中的关键字数目没有超过2,则插入完成.如图(c)(d)(5)B树的删除(可能涉及结点的合并操作)
2、B+树
(1)B+树的特征以及与B树的差别
(2)每个叶子节点都有一个指针,指向下一个数据,形成一个有序链表。而只有叶子节点才会有data,其他都是索引。
(3)B+树的插入
案例:阶数为5。
a)空树中插入5。
b)依次插入8,10,15,16。
插入16后产生分裂:
c)插入17,18
插入18后产生分裂:
d) 插入几个数据后。
e)再继续插入7。
最终的分裂结果:
1、散列函数:一个把查找表中的关键字映射成该关键字对应的地址的函数。散列函数可能会把两个或两个以上的不同关键字映射到同一地址,这种情况称为冲突;冲突是不可避免的额,所以要设计处理冲突的方法。
2、散列表:根据关键字直接进行访问的数据结构。
3、构造散列函数的注意事项:
(1)散列函数的定义必须包含全部需要存储的关键字,而值域的范围则依赖于散列表的大小或地址范围;
(2)散列函数计算处理的地址应该能等概率、均匀地分布在整个地址空间中,从而减少冲突的发生;
(3)散列函数应尽量简单,能够在较短的时间内计算出任一关键字对用的散列地址。
4、常用的散列函数
(1)直接定址法
关键码本身和地址之间存在某个线性函数关系时,散列函数取为关键码的线性函数,即:H(key)=a*key+b,a、b均为常数。这样的散列函数优点就是简单、均匀,也不会产生冲突,但问题是这需要事先知道关键字的分布情况,适合査找表较小且连续的情况。由于这样的限制,在现实应用中,直接定址法虽然简单,但却并不常用。
(2)数字分析法
假设关键码完全已知,且每个关键码都是以某个数r为基数(例以10为基数的十进制数)的值,则关键码中若干位恰能构成分布比较均匀的散列地址空间时,可取关键码的若干位的组合作为散列地址。
(3)除留余数法
通过选择适当的正整数p,按计算公式 H(K)=Key%p 来计算关键码K的散列地址。若关键码个数为n,散列表表长为m(一般m>=n),通常选p为小于或等于表长m的最大素数或不包含小于20的质因子的合数,一般也要求p>=n。这种方法计算最简单,也不需根据全部关键码的分布情况研究如何从中析取数据,最常用。
(4)平方取中法
将关键码K平方,取K^2中间几位作为其散列地址H(K)的值。假如有以下关键字序列{421,423,436},平方之后的结果为{177241,178929,190096},那么可以取{72,89,00}作为Hash地址。
5、处理冲突的方法
(1)开放定址法
(2)拉链法
将所有散列地址相同的记录存储在同一个单链表中,该单链表为同义词单链表,或同义词子表。该单链表头指针存储在散列表中。散列表就是个指针数组,下标就是由关键码用散列函数计算出的散列地址。初始,指针数组每个元素为空指针,相当于所有单链表头指针为空,以后每扫描到一条记录,按其关键码的散列地址,在相应的单链表中加入含该记录的节点。开散列表容量可很大,仅受内存容量的限制。
案例:具体的关键字列表为(19,14,23,01,68,20,84,27,55,11,10,79),则哈希函数为H(key)=key MOD 13。则采用除留余数法和链地址法后得到的预想结果应该为:
6、散列表的性能分析
案例性能分析:
(1)开放定址法的平均查找长度
ASL成功=(1+1+1+3+4+1+2+8)/8=21/8
ASL失败=(9+8+7+6+5+4+3+2+1+1+1)/11=47/11
(2)拉链法的平均查找长度
ASL成功=(1x6+2x4+3x1+4x1)/12=21/12=1.75
ASL失败=(1+5+1+3+1+1+3+2+1+1+3+2+1)/13=25/13
(3)装填因子
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。