顺序查找
折半查找
- mid = (low + high)/2
- 先变成折半查找判定树,然后和二叉排序树的方法一样
二叉排序树
- 二叉排序树的查找
- 查找成功
- 每个结点的层数之和/结点个数
- 查找失败
- (叶结点的层数之和 * 2)/(叶结点个数 * 2)
查找失败的地方为叶结点的左右孩子
- (叶结点的层数之和 * 2)/(叶结点个数 * 2)
- 查找成功
散列表
-
装填因子 = 表中记录数n/散列表长度m
-
散列函数:hash(key) = key % p
注意:p选取小于或者等于表长的最大素数 -
处理冲突的方法
注意:不能删除元素,不然后面的数据会乱套。- 开放地址法
- 线性探测法(常考)
0, +1, +2, +3 … - 平方探测法(考过一次)
0, +1, -1, +4, -4 … - 再探测法(考过一次)
用第二个哈希函数再算一次
- 线性探测法(常考)
- 拉链法(常考)
- 开放地址法
-
散列表的查找
- 查找成功
- 遍历关键字序列,关键字查找次数之和/关键字个数
- 次数:从原本位置到实际位置
- 查找失败
- 遍历哈希表,哈希值查找次数之和/哈希值个数
次数:从原本位置到第一个0的位置,一开始是空格次数就是1,哈希表内循环
- 遍历哈希表,哈希值查找次数之和/哈希值个数
- 查找成功
-
查找的时间复杂度
- 顺序查找 o((n+1)/2)
- 折半查找 o(nlog{2, n})
- 哈希表查找 o(1)