贡献者: 有机物
哈希表又称散列表,哈希通常是把一些值域较大的数映射成值域较小的数。比如把
维护一个集合,支持如下几种操作:
现在要进行
数据范围:
因为
一般哈希函数设计为 Hash(x) = (x mod P)
。
因为因为值域变小了,很有可能把原始值不同的两个数映射到同一个位置,所以我们需要处理这种冲突情况。处理冲突的两种方式:拉链法,开放寻址法。
拉链法:
先开一个一维数组来保存每个数的哈希值,如果有数映射到了某个位置,我们就在那个位置开一个链表用于记录每个数。查询每个数是否存在的的时候,就在对应的哈希位置遍历一下整个链表,对其中的每个数比较其值与查询的值是否一致。
拉链法的时间复杂度为
一般来说,设计哈希算法取模的数要设置为一个质数,数学上可以证明这么取冲突的概率是最小的。
开放寻址法:
开放寻址法只需要开一个一维数组,一般数组大小要开到题目要求的
以上就是处理
友情链接: 超理论坛 | ©小时科技 保留一切权利