Co-Authored-By: Margatroid <i@margatroid.xyz>
这里面的 $b$ 和 $M$ 需要选取得足够合适才行,以使得 Hash 函数的值分布尽量均匀。
-如果 $b$ 和 $M$ 互质,在输入随机的情况下,这个 Hash 函数在 $[0,M)$ 上每个值概率相等,此时单次比较的错误率为 $\frac1M$ 。所以,哈希的模数一般会选用大质数。
+如果 $b$ 和 $M$ 互质,在输入随机的情况下,这个 Hash 函数在 $[0,M)$ 上每个值概率相等,此时单次比较的错误率为 $\frac 1 M$ 。所以,哈希的模数一般会选用大质数。
## Hash 的实现
### 错误率
-若进行 $n$ 次比较,每次错误率 $\frac1{M}$ ,那么总错误率是 $1-(1-1/M)^n$ 。在随机数据下,若 $M=10^9 + 7$ , $n=10^6$ ,错误率约为 $\frac 1{1000}$ ,并不是能够完全忽略不计的。
+若进行 $n$ 次比较,每次错误率 $\frac 1 M$ ,那么总错误率是 $1-\left(1-\frac 1 M\right)^n$ 。在随机数据下,若 $M=10^9 + 7$ , $n=10^6$ ,错误率约为 $\frac 1{1000}$ ,并不是能够完全忽略不计的。
所以,进行字符串哈希时,经常会对两个大质数分别取模,这样的话哈希函数的值域就能扩大到两者之积,错误率就非常小了。