modify the representation of %.
This commit is contained in:
@@ -138,7 +138,7 @@ $$
|
||||
|
||||
可是,关于平方试探法,我们不难提出一些问题,比如平方试探法果真可以覆盖整个散列表吗?是否存在散列表本来有空桶,却无法被探测到的现象?
|
||||
|
||||
这种情况是存在的,可以自己举一些例子要验证一下。不过,只要散列表长度$M$为素数,并且装填因子$\lambda \le 50\%$,则平方试探法迟早必然会终止于某个空桶,即$n^2 \% M$的取值恰好有$ceil(\frac{M}{2})$种,并且恰好由查找链的前$ceil(\frac{M}{2})$取遍。以下给出证明:
|
||||
这种情况是存在的,可以自己举一些例子要验证一下。不过,只要散列表长度$M$为素数,并且装填因子$\lambda \le 0.5$,则平方试探法迟早必然会终止于某个空桶,即$n^2 \ mod\ M$的取值恰好有$ceil(\frac{M}{2})$种,并且恰好由查找链的前$ceil(\frac{M}{2})$取遍。以下给出证明:
|
||||
|
||||
设$a < b < ceil(\frac{M}{2})$,并且第$a$次试探与第$b$次试探冲突,即$a^2, b^2$是$M$的同余类
|
||||
|
||||
@@ -153,7 +153,7 @@ $$
|
||||
|
||||
> 双向平方试探法
|
||||
|
||||
根据上面的分析,在$M$为素数并且装填因子$\lambda < 50\%$的时候,单向平方试探法可以保证试探必然终止。一个自然的想法是,另一半的桶,是否也可以利用起来呢?这就是双向平方探测法。
|
||||
根据上面的分析,在$M$为素数并且装填因子$\lambda < 0.5$的时候,单向平方试探法可以保证试探必然终止。一个自然的想法是,另一半的桶,是否也可以利用起来呢?这就是双向平方探测法。
|
||||
|
||||
双向平方探测法,就是在发生冲突时,依次向前向后进行平方探测,即
|
||||
$$
|
||||
@@ -191,6 +191,6 @@ $$
|
||||
|
||||
顾名思义,设置一个二级散列函数来确定试探位置,即
|
||||
$$
|
||||
[hash(key) + j \times hash_2(key)] \% M
|
||||
[hash(key) + j \times hash_2(key)] \ mod\ M
|
||||
$$
|
||||
其他的方法其实都可以视作再散列法的一个实例。
|
||||
|
||||
Reference in New Issue
Block a user