数据结构和算法-散列表
Posted 恒奇恒毅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构和算法-散列表相关的知识,希望对你有一定的参考价值。
散列表又叫哈希表,是根据键(KEY)直接访问在内存存储位置的数据结构,由数组或者链表演化而来。一般需要对KEY进行运算得到一个数字,再映射到数据或者链表的某个位置,如此可以在时间复杂度为O(1)的情况下对数据进行访问。
对KEY进行运算的函数一般称为散列函数(hash),它一般要满足几个基本的需求:
- 散列函数计算得到的散列值必须是大于等于0的正整数,因为此值要作为数组的下标;
- 如果key1==key2,那么经过hash后得到的hash值也必须相同;
- 如果key1!=key2,那么经过hash后得到的hash值可能相同或者不同(所谓的hash碰撞)。
好的散列函数满足:
- 不能太复杂,因为太复杂势必要消耗很多的时间在计算hash值上,就间接影响散列表的性能;
- 散列函数计算得出的hash值尽可能的随机并且均匀分布,这样使得散列冲突最小化。
散列冲突
两个不同的KEY,计算出来的hash值可能相同,因而被映射到同一位置上。这就是散列冲突或者hash碰撞。再好的散列函数也无法避免散列冲突,如果出现了冲突,一般有两类方法解决:开放寻址法、链表法。
- 开放寻址法
其核心思想是:一旦出现冲突,就重新去寻找下一个空的地址
1)线性检测
如果某个数据经过散列函数散列之后,存储位置已经被占用,就从当前位置,一次往后查找,直到找到空闲位置为止。查找的时候也一样&#x
以上是关于数据结构和算法-散列表的主要内容,如果未能解决你的问题,请参考以下文章