转载自 哈希表(散列表)的运作原理
哈希函数是获取数据下标的函数:
为了查找的时候,减少计算次数(链表等在查找时计算次数很多)
哈希冲突:
数字容易挨在一起
数据顺序: 15,2,28,4,38,12
15 mod 13 = 2 放到下标2位置
2 mod 13 = 2 下标2位置已经被占,+1后 下标3的位置未被占,放入
28 mod 13 = 2 下标2位置已经被占,+1后 下标3的位置也被占,+1后下标3的位置没被占,放入
4 mod 13 = 4 下标4位置已经被占,+1后 下标5的位置未被占,放入
38
38 mod 13 = 12
12 mod 13 = 12 下标12位置已经被占,+1后 (首位循环)下标0的位置未被占,放入
数据顺序: 15,2,28,19,10
15 mod 13 = 2 放入下标 2 位置
2 mod 13= 2 下标 2 位置已被占用,这次为下标 2 的第一次查找位置,
2
+
1
2
=
3
2+1^{2}=3
2+12=3,放入
28 mod 13 = 2 下标 2 位置已被占用,这次为下标 2 的第二次查找位置,
2
+
2
2
=
6
2+2^{2}=6
2+22=6,放入
19 mod 13 = 6 下标 6 位置已被占用,这次下标 6的为第一次查找位置,
6
+
1
2
=
7
6+1^{2}=7
6+12=7,放入
10 mod 13 = 10 放入下标 10 位置
使用两个哈希函数
数据顺序: 15,2,18,28
15 mod 13 = 2
2 mod 13 = 2 遇到冲突,使用第二个哈希函数: 7-(2 mod 7)= 7-2=5,从下标2往后数5个,2+5=7,放入
18 mod 13 = 5 放入
28 mod 13 = 2 遇到冲突,使用第二个哈希函数: 7-(28 mod 7)= 7-0=7,从下标2往后数7个,2+7=9,放入
哈希表: