数据结构之哈希
- 散列方法:利用散列函数进行散列。
- 常见的散列函数:(1)取余法:H( Key ) = Key % M
(2)平方取中法:H( Key ) = Key2 的中间部分,其长度取决于表的大小。
(3)乘法杂凑函数:H( Key ) = M * (( * Key ) % 1 ) - 如何解决经过hash后两数的hash值是同一个的问题:
解决方法:(1)线性探测:将hash值相同的两个值存在相邻的表的位置里。
e.g:H(k) = k % 11,
这种方法的不足之处:会造成堆积(找值缓慢),且最关键的问题是如果删除恰好占了对应的hash值得第一个值的对应位置的上过一个hash值被删除的位置的话,将找不到下一个值
(2)二次探测法:hash(k)=d 如果位置被占,则会探测对应的d-1(d+1),(d-2^2) (d+2^2)…的位置
(3)再hash: 如果hash(k)=d的位置被占,则会在计算一个hash值c然后探测d+C,d+2c,d+3c等位置。
还可以应用的方法:将两个hash值相同的值存在一个链表里。