什么是哈希表
根据设定的哈希函数H(key)和处理冲突的方法,将一组数据映像到一个连续的地址集(区间),并以关键字中地址集的‘像’作为记录在表中的位置,成为哈希表。
通俗地讲就是哈希表就是用来记录一组数据(key)的地址的。
哈希函数的构造方法。
1. 直接定址法。
H(key) = key ;或H(key) = a*key +b.
2. 数字分析法。
3. 平方取中法
4. 折叠法
5. 除留余数法(m为哈希表长度)
H(key)= key MOD p, p<=m;
6. 随机数法
解决冲突的方法
1. 开放定址法
Hi = (H(key) + di) MOD m i =1,2,3.......,k (k<= m-1)
其中H(key) 为哈希函数;m为哈希表长度;di为增量序列,
di的三种取法:
1、di=1,2,3...........,m-1 称为线性探测再散列
2、di=1^2,-1^2, 2^2, -2^2, 3^2, -3^2........,±k^2, (k<=m-1),称为二次探测再散列。
3、di伪随机数。
0 1 2 3 4 5 6 7 8 9 10
|
|
|
|
|
|
60 |
17 |
29 |
|
|
|
(a)插入前
0 1 2 3 4 5 6 7 8 9
|
|
|
|
|
|
60 |
17 |
29 |
38 |
|
|
(b)按照线性探测再散列38%11 = 5 然后6不行就7不行就8.
0 1 2 3 4 5 6 7 8 9
|
|
|
|
|
38 |
60 |
17 |
29 |
|
|
|
(c)按照二次探测再散列38%11 = 5 然后+1=5不行就-1=4.就可以了。
0 1 2 3 4 5 6 7 8 9
|
|
|
38 |
|
|
60 |
17 |
29 |
|
|
|
(d)用随机数。
2. 再哈希法,Hi = RHi(key) i=1,2,3.....,k
根据不同哈希函数计算哈希地址,RHi为不同的哈希函数,不容易产生聚集,但是增加了时间。
3. 链地址法
|
^ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0
1
2
3
4
5
6
7
8
9
10
11
12
4. 建立一个公共溢出区
3113

被折叠的 条评论
为什么被折叠?



