一.查找表
1.定义: 查找表是(查找结构)一种由同类型的数据元素或者(记录)构成的集合
2.类型:
1>静态查找表
只进行查找的某个特定元素是否在查找表中或者查找某个特定值的某种属性的查找表叫静态查找表。
2>动态查找表
在查找的过程中插入表中不存在的数据或者删除数据的查找表叫动态查找表。
二.静态查找表
1.顺序查找
平均查找长度:ASL = n+1/2
2.折半查找
1> 平均查找长度:log2(n)
2>判定树:可以比较次数为几的要素所在的层数
三.动态查找表
1.二叉排序树
(1)定义/性质
1>根节点左子树的值全都要小于根节点的值
2>根节点右子树的值全都要小于根节点的值
3>左子树的值全都小于右子树的值
(2)插入规则
eg:画出(12,2,14,5,8,10,1)的二叉排序树,之后再将6插入表中
将6插入步骤:1.与12做比较小于放左,大于放右
2.小于12再与2比较,同上
3.再与5比较,同上
4.与8比较,同上
5.6比8小所以,6应该被插入到8的左子树上,即如下图
(3)删除规则
1>当只有根结点时:直接删除即可
2>当结点上有左子树/右子树时:将左/右子树代替要删除的结点
3>当结点上左右子树都有时:用中序遍历将二叉排序树写出来,将要删除结点的前驱代替删除点 或者 后继代替、
2.平衡二叉树
平衡树怎么来的?
当表中的关键字序列为递增/减序列,则二叉排序树为单分支,这样计算时耗费时间
因此,为解决这样的问题,使用平衡树
(1)定义
平衡二叉树又称AVL树,具有以下性质的二叉树:
1>它的左右子树都是平衡二叉树,且左子树和右子树的深度的绝对值不超过1的树叫平衡二叉树
(2)平衡因子(平衡度)
平衡因子 =( 该结点左子树的度)- (该结点右子树的度)
注意:平衡因子的值只能是 1 0 -1 ,若该值的绝对值 > 1 ,则该树不是平衡二叉树需要转换为平衡二叉树
(3)非平衡---->平衡的方法
1>LL型平衡旋转
条件:不平衡点(A)的左孩子(B)的左子树(C) 有插入的结点
旋转方式:将C代替A,
2>RR型平衡旋转
条件:不平衡点(A)的右孩子(B)的右子树(C) 有插入的结点
选装方式:图(c)到(d)将
3>LR型平衡旋转
条件:不平衡点(A)的左孩子(B)的右子树(C) 有插入的结点
旋转方式:
4>RL型平衡旋转
条件:不平衡点(A)的右孩子(B)的左子树(C) 有插入的结点
旋转方式
旋转方式以下题为例:
下列二叉排序树以序列(13,24,37,90,53)所画
做题步骤:
1.首先计算每个结点的平衡度,找到绝对值>1的结点,该结点就是不平衡点(记为A)
2.然后再判断A的不平衡时由于左/右哪个子树造成的,这里按照左子树造成的(记为B)
3.再判断B左右子树的哪个树有多余结点,这个树(记为C)
4.根据ABC属于哪个类型的旋转,从C开始旋转。
四.哈希查找
为什么要有哈希查找?
顺序查找、折半查找、二叉排序等等都需要进行比较才可以查找出所要的数据,有没有一种方法可以不用比较就可以找到,哈希查找诞生了。
1.基本思想:哈希查找就是在记录的存储地址和它的关键词之间建立一个确定的对应关系,这样通过一次存取就得到所查元素的查找方法。
2.哈希函数、哈希表、哈希查找(以下面的例子解释)
3.哈希函数的构造方法:
直接定址法(考试)
除留余数法(考试必考)
注意:选取哈希函数考虑以下的因素:
1>计算哈希函数所需时间
2>关键字长度
3>哈希表长度
4>关键字分布情况
5>记录的查找频率
4.在哈希查找的过程中,会有同义词,会起冲突,为了解决冲突用开放地址法来解决
开放地址法:当发生冲突时,形成一个探查序列,沿着此序列地址探查,直到找到一个空位置(开放的地址),将发生冲突的记录放在该地址中,即
H = (H(key)+ d)MOD m
d-----增长序列
m-----哈希表表长
H(key)----哈希函数
一般情况下题中的哈希函数以及哈希表长度题中会给出
1>线性探测再散列:d = 1,2,3,4,.....,m -1
2>二次探测再散列:d = 1**2,(-1)**2,2**2,(-2)**2.....,+/-k**2(k = m/2)
3>伪随机探测再散列:d = 伪随机数序列(随便一个数)
eg1
eg2