3.1.40

3.1.40 #

解答 #

顺序查找平均需要进行 $N/2$ 次比较,二分查找则是 $\lg N$ 次。

列出方程可以解出 N 的大小

$$ \begin {eqnarray*} 1000 \log_2 N &=& N / 2 \newline \log_2 N &=& N / 2000\newline \frac{\ln N}{\ln 2} &=& N/2000 \newline N &=& e^{\frac{\ln 2}{2000}N}\newline 1 &=& Ne^{-\frac{\ln 2}{2000}N}\newline N_1 = e^{-W(-\frac{\ln 2}{2000})}=1 &\ & N_2= e^{-W_{-1}(-\frac{\ln 2}{2000})}=29718\newline \newline \end {eqnarray*} $$

这个方程是一个超越方程,最后的结果中出现了朗伯 W 函数。

同理可以求得 10000 倍的 N=369939。

实验结果如下:

由于存在缓存优化,每次比较的耗时并不相同。

因此实际耗时并未达到预期,但比较次数是符合预期的。

另请参阅 #

朗伯 W 函数-维基百科