哈希函数、哈希冲突

210 阅读1分钟

哈希函数的构造方法

根据元素集合的特性构造:

要求一:

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. 建立一个公共溢出区