我正在阅读 Sedgewick 的 Rabin-Karb 算法。书上说:
我们使用随机素数 Q 取尽可能大的值,同时避免溢出
在第一次阅读时,我没有注意到随机的重要性,当我看到代码long
中使用了 a 时,我的第一个想法是:
a)使用 Eratosthene 的筛子找到适合 along
或
b)从列表中查找质数任何足够大且大于的质数int
并将其用作常数。
但是其余的解释说:
我们将使用一个
long
大于10^20
使发生碰撞的概率小于的值10^-20
这部分让我感到困惑,因为 along
不适合10^20
更不用说大于那个值了。然后,当我检查素数的计算时,这本书遵循了一个只有以下提示的练习:
一个随机的 n 位数是质数,概率与 1/n 成正比
这意味着什么?
所以基本上我没有得到的是:
a)使用随机素数是什么意思?为什么我们不能预先计算它并将其用作常数?
b)为什么10^20
提到它,因为它超出了范围long
?
c) 这个提示有什么帮助?究竟是什么意思?