散列表又称哈希表,散列表是一种数据逻辑结构,通过特定的算法来确定一串散列地址,当需要存放元素的时候,则会存在对应的地址。
1、除留余数法:H(key) = key % p
散列表表长为m,取一个不大于m但最接近或等于m的质数p
2、直接定址法:H(key) = k 或 H(key) = a*key + b
ab都是常数,适用于连续内容存储
3、数字分析法:选取数码分布较为均匀的若干位作为散列地址
例如电话号码
4、平方取中法:取关键字的平方值得中间几位作为散列地址
通过上面的算法函数,就能够确定每一个元素存放的位置,但是会存在另外一种情况,例如:当使用 H(key) = key % 2 时,13 和 15 最终会存在哈希值为1的地址中,这就存在了冲突,需要用特殊的手段进行处理。
1、拉链法
这种方法在java中的hashmap中用的非常多
2、开放定地法(三种方法都是由di不同决定)(H(key) + di) % m,H(key) = key % p
线性探测法
di = 1,2,3,4,5,...,n,存入的时候如果冲突,则用下一个
平方探测法
当di = 0^2,1^2,-1^2,2^2,-2^2,...,k^2,-k^2时,存入的时候如果冲突,则用下一个
伪随机序列法
自定义di = a,b,c,d,...m,n,存入的时候如果冲突,则用下一个