哈希表
哈希表其实就是建立和存储一种映射关系
离散化、桶排序就是一种简单数值哈希
常见的哈希方法:
除法哈希法 hash(key) = keymod M(M为素数)
乘法哈希法 hash(key) = floor( M/W * ( a * key mod W) )
通常设置M为2的幂次方
W为计算机字长大小(也为2的幂次方)
a为一个非常接近于W的数
若a=W*(√5-1)/2,则为斐波拉契哈希法
相同的输入hash之后一定相同hash值相同的值一定是同一个输入吗?
—— “哈希冲突”。
哈希冲突
是哈希就会冲突,但是合理的选择哈希函数可以让冲突的概率降低真的冲突了怎么办?
冲突解决办法:
拉链法 链表实现,每个位置一个链表,存储冲突的元素
开放地址法 如果冲突,就按一定的规则放到其它位置