关于哈希的概念已经有太多
我也不想讨论太多
在此只做简单的介绍
哈希:就是在数据的存储过程中将 数据 与 所存储的位置 通过 哈希函数 所绑定在一起
举个简单的例子:
我们有一个可以存储10个元素的数组:array[MAX_SIZE], 其中 MAX_SIZE=10;
我们有4个数据 (data) 需要存储到这个数组中
我们可以通过一个简单的哈希函数(除留余数法)来处理这些数据,以得到一个在数组中的地址
具体为:
然后存储结果为:
如此存储,当我们想要查询某个数据是否在数组中时,就可以直接对这个数据进行哈希函数处理得到位置,
然后在数组中的这个位置查询即可,就不用通过遍历数组的方式,简单快捷
但是这种方式会出现问题
号称:哈希冲突:两个不同的数据 通过 同一个哈希函数 得到 同一个哈希地址
具体为
我们在数组中新加一个数据:13
他的哈希地址:hashAddr = 13 % 10 =3;
但是数组中 3 位置已经有个一个数据,
所以我们把它存储到 3 位置往后的 下一个空位置中
这种解决冲突的方法称为:闭散列
而这种查询空位置的方法为:闭散列中的 线性探测法
当然,还有其他的解决冲突的方法和其他的寻找空位置的方法,
我们在此篇文章不做深究。