哈希表

巧了我就是萌 提交于 2020-01-22 05:32:56

1.什么是哈希表?

哈希表也叫散列表,是一种运算时用空间换取时间的数据结构,那么他是如何实现高效的数据处理的呢?举个例子,我们在做查找操作时,通常是需要对数据结构进行遍历,例如数组或者链表,通过比较相同的值,若相同则返回该值的下标,因此这样做查找的时间复杂度是O(n),哈希表是通过对key进行哈希函数的处理得到索引(index),然后将索引和数据一并存入该数据结构,这就是哈希表。

2.哈希表的复杂度

1.利用哈希函数生成key对应的index(O(1))
2.根据index操作定位数组元素(O(1))
由此可见,哈希表的运算过程时间复杂度降低,但是由于需要额外的空间存索引等数据,因此需要牺牲空间复杂度。

3.哈希表的特点

1.哈希碰撞(哈希冲突)
数据在进行哈希函数处理后,有时不同的数据会产生相同的结果,这就是哈希碰撞

这样就使得不同的值对应到相同的索引上,造成数据的冲突。解决哈希碰撞的常见方法有:
1.开放地址法(Open Addressing)
按照一定规则向其他地址探测,直到遇到空桶。
2.再哈希法
设计多个哈希函数。
3.链地址法
比如通过链表将同一index的值串起来。

4.良好的哈希函数特点

让哈希值更加均匀分布->减少哈希冲突次数->提升哈希表的性能
让哈希值均匀的目的是减少哈希碰撞,当多个值集中分布到相同索引时,造成哈希碰撞的可能性大大提高,因此若让哈希值相对均匀分布,可以减少哈希冲突的次数,从而提升哈希表性能。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!