一. 定义
将元素通过一个函数转化为整数,使得该整数可以尽量唯一地代表这个元素。
二. 常用的散列函数
除留余数法
H ( k e y ) = k e y % m o d H(key)=key\%mod H(key)=key%mod
三. 消除“冲突”的函数
1. 线性探测法
H ( k e y ) = H ( k e y ) + 1 H(key)=H(key)+1 H(key)=H(key)+1
2. 平方探测法
H
(
k
e
y
)
=
H
(
k
e
y
)
+
1
2
、
H
(
k
e
y
)
=
H
(
k
e
y
)
−
1
2
H(key)=H(key)+1^2、H(key)=H(key)-1^2
H(key)=H(key)+12、H(key)=H(key)−12
H
(
k
e
y
)
=
H
(
k
e
y
)
+
2
2
、
H
(
k
e
y
)
=
H
(
k
e
y
)
−
2
2
H(key)=H(key)+2^2、H(key)=H(key)-2^2
H(key)=H(key)+22、H(key)=H(key)−22
.
.
.
.
.
.
.
.
.
.
..........
..........
H
(
k
e
y
)
=
H
(
k
e
y
)
+
n
2
、
H
(
k
e
y
)
=
H
(
k
e
y
)
−
n
2
H(key)=H(key)+n^2、H(key)=H(key)-n^2
H(key)=H(key)+n2、H(key)=H(key)−n2
在这个过程中,如果碰到
H
(
k
e
y
)
H(key)
H(key)大于hash table的长度或者小于0的时候,则利用对表长(小于0加表长)取模解决。
怕麻烦,直接用正向平方探测法解决,即只用
H
(
k
e
y
)
=
H
(
k
e
y
)
+
k
2
H(key)=H(key)+k^2
H(key)=H(key)+k2
如果k在
[
0
,
T
s
i
z
e
)
[0,Tsize)
[0,Tsize)范围内都无法找到位置,就不用找了^^
用法 PTA甲级1145 Hashing - Average Search Time