hash表的冲突解决方法
前要知识:hash表有多大就要开多少个空间,记得从0开始。 1.链地址法(又称拉链法、开链法等)Separate chaining hash table 如图所示,今有若干数据,将其使用链地址法存储起来,其示意图如下,如果冲突了就把他接在别人的屁股上,真的是相当方便和简单呢。 2.开放地址法 开放地址法主要有三种方法: 线性探查法(linear probing)、 二次探查法(quadratic probing)、 双重hash(second hash或double hash) 这些都是属于开放地址法 注意对双重hash要与再hash做好区分 首先是线性探查法 这个很简单,就是一次hash后发现要插入的位置已经被别的元素占了,就往下移一个,再冲突再移呗。 默认hash规则都是 mod10. 比如依次插入: 89 18 49 58 9 接下来是平方探查法(二次探查法) 它和线性类似,不过它在遇到冲突时是按照平方来的,并且是正负依次走下去,比如:1,-1,4,-4,9,-9,形如这种。 还是: 89 18 49 58 9 比如49时冲突了(9+1)mod=0; 就插入0号位,58冲突时就正负1不行了都冲突了,就轮到2的平方也就是4 (8+4)mod10=2,所以就放入2号位 ,同理其他都是这样。 最后一个是双重hash: 这个很有它的特点