假设采用了开放寻址法和均匀散列技术将n个关键字插入到一个大小为m的散列表中。设p(n,m)为没有冲突发生的概率。试证明:。(提示:见式(3.12)。)论证当n超过
时,不发生冲突的概率快速趋近于0。
对于所有实数x,我们有不等式 (3.12)
稍作变形,对x大于-1时在两边以e为底取对数有
不难推算将n个关键字插入到一个大小为m的散列表中,不发生冲突的概率为:
对其取以e为底的对数有:
结合上述式(3.12)变形,有:
即
因此
然而不发生冲突的概率快速趋近于0令人费解
为方便说明选取m = 1000对其进行作图
import matplotlib.pyplot as plt
import math
def prod(n, m = 1000):
res = 1
for i in range(1, n):
res *= (1 - n / m)
return res
x = list(range(1, 1000))
y = [prod(i) for i in x]
z = [math.e**(-i * (i - 1) / 2000) for i in x]
plt.plot(x, y, label = 'real')
plt.plot(x, z, label = 'limit')
plt.legend()
plt.show()
对函数分别求一次、二次导数得到:
大致可以认为 是函数拐点,超过后函数值趋近于0,但并不快速