哈希函数的构造方法
根据元素集合的特性构造:
要求一:
n个数据原仅占n个地址,虽然散列查找是以空间换时间,但仍希望散列的地址空间尽量小。
要求二:
无论用什么方法存储,目的都是尽量均匀地存放元素,以避免冲突。
1. 直接定址法
2. 数字分析法
3. 平方取中法
4. 折叠法
5. 除留余数法
6. 随机数法
直接定址法
Hash(key) = a*key + b (a,b为常数)
优点:以关键码key的某个线性函数为散列地址,不会产生冲突
缺点:需要占用连续的地址空间,空间效率低
除留余数法
Hash(key) = key mod p (p是一个整数)
关键:如何选取合适的p
技巧:设表长为m,取p<=m且为质数
处理冲突的方法
1. 开放定址法(开地址法) (1,2常用)
2. 链地址法(拉链法)
3. 再散列法(双散列函数法)
4. 建立一个公共溢出区