- 顺序查找
- 折半查找
散列表
- 散列表的基本概念
- 散列函数的构造方法
- 处理冲突的方法
线性表查找
顺序查找
[1,2,3,4,5],需要找出大于4的数,那就回从第一位开始比较,知道找出大于4的数
顺序查找不一定就是要求有序
等概率的情况,平均查找长度(n+1)/2
折半查找
找出1,[1,2,3,4,5,6] =>[1,2,3],[4,5,6]=>[1,2,3]=>[1]
在概率相等的情况:以2为底N的对数。
散列表
基本概念
散列表是一个有限连续的存储空间
存储位置与关键字的关系:H(key) (关键字)= P(存储位置)
不同的关键字也会出现同一个位置的情况
构造方法
除留余数法
H(key) = key%p:用关键字除于P,得到的余数就是散列地址。
数字分析法(要先知道关键字的集合) 提取关键字集合中分布比较均匀的几位作为散列地址
处理冲突的方法
线性探测法
[1,2,3,4,5,6,8] 当5和8%3的时候,地址都是2,那8就会(H(key)+d)%m i从1到无穷大,第一次解决冲突,那d就是1,第二次就是2。
会产生二次聚集,但散列表没有满之前,总能找到一个不发生冲突的地址
二次探测法
Hash(key) = (Hash(key) + d) % 11,其中d = 1^2, -1^2, 2^2, -2^2, 3^2,……,
可以避免二次聚集,但不能保证一定能找到不发生冲突的地址
伪随机探测法
假设随机生成数是5,那地址为(5+9)%11 = 3,插入序号为3的位置
可以避免二次聚集,但不能保证一定能找到不发生冲突的地址
链地址法
[19,14,23,1,68,20,84,27,55,11,10,78]%13,就会产生13个单链表(从0-13),而14.1.27.79是同义词,他们将构成一个单链表,并将链表的头指针放在序号为1的单链表。