1.什么是哈希表?
哈希表也叫散列表,是一种运算时用空间换取时间的数据结构,那么他是如何实现高效的数据处理的呢?举个例子,我们在做查找操作时,通常是需要对数据结构进行遍历,例如数组或者链表,通过比较相同的值,若相同则返回该值的下标,因此这样做查找的时间复杂度是O(n),哈希表是通过对key进行哈希函数的处理得到索引(index),然后将索引和数据一并存入该数据结构,这就是哈希表。
2.哈希表的复杂度
1.利用哈希函数生成key对应的index(O(1))
2.根据index操作定位数组元素(O(1))
由此可见,哈希表的运算过程时间复杂度降低,但是由于需要额外的空间存索引等数据,因此需要牺牲空间复杂度。
3.哈希表的特点
1.哈希碰撞(哈希冲突)
数据在进行哈希函数处理后,有时不同的数据会产生相同的结果,这就是哈希碰撞
这样就使得不同的值对应到相同的索引上,造成数据的冲突。解决哈希碰撞的常见方法有:
1.开放地址法(Open Addressing)
按照一定规则向其他地址探测,直到遇到空桶。
2.再哈希法
设计多个哈希函数。
3.链地址法
比如通过链表将同一index的值串起来。
4.良好的哈希函数特点
让哈希值更加均匀分布->减少哈希冲突次数->提升哈希表的性能
让哈希值均匀的目的是减少哈希碰撞,当多个值集中分布到相同索引时,造成哈希碰撞的可能性大大提高,因此若让哈希值相对均匀分布,可以减少哈希冲突的次数,从而提升哈希表性能。
来源:CSDN
作者:_GMX
链接:https://blog.csdn.net/qq_37074103/article/details/104061357