哈希表的简单理解

哈希表

我们要在数组或者链表里查找一个指定得数据,唯一能做得事情就是遍历的去查找,这样的时间复杂度是O(n),那有没有一种方法可以以O(1)的时间复杂度找到这个数据呢?现在来想这个一个问题,现实生活中我们的衣物都是分类存放的,放的时候根据是什么种类的衣物放到指定的地方,取的时候依照要取的衣物种类去指定的地方找,这就是O(1)复杂度的操作,那在编程里怎么实现放在哪去哪找这个动作呢,哈希函数就是用来干这个的,哈希函数是一个概念不是一个指定的函数,实际应用中具体的实现有很多,比如这里我就把哈希函数定义为h(x) = x%3,这时候我们要存储数字4,经过哈希函数得到1,就把4存在位置为1的地方,找的时候再去位置为1的地方去找。再比如我们要存入5那就是5%3=2,存在位置2。

但是当我们要存入7呢,7%3=1,又要存入1了,4存在位置1,7也存在位置1,那这个位置1到底存的是4还是7呢?

这就是所谓的哈希冲突,h(x)=h(y),发生冲突在所难免,我们能做的就是就是减少冲突的次数,哈希函数选的得当,就能减少冲突次数。既然冲突在所难免,那冲突了怎么办呢,自然有解决办法,这里要说的是链地址法,就是存放数据的位置放一个列表把冲突的数据都放进去。

总结

哈希表的核心就是哈希函数和解决冲突的方式,这两点都是有多种选择的,具体使用什么样的哈希函数,什么样的冲突解决方法都要因情况而定。

posted @ 2020-05-05 18:40  林静生寒  阅读(266)  评论(0编辑  收藏  举报