From 4c0a8cfa335873fcb1cc94ab12fc1110fed5b469 Mon Sep 17 00:00:00 2001 From: ouuan Date: Wed, 11 Sep 2019 08:46:22 +0800 Subject: [PATCH] :pencil2: fix hash.md --- docs/string/hash.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/string/hash.md b/docs/string/hash.md index c7be51d4..b60fb540 100644 --- a/docs/string/hash.md +++ b/docs/string/hash.md @@ -6,9 +6,9 @@ Hash 的核心思想在于,将输入映射到一个值域较小、可以方便 这里的“值域较小”在不同情况下意义不同。 在 [哈希表](../ds/hash.md) 中,值域需要小到能够接受线性的空间与时间复杂度。 - + 在字符串哈希中,值域需要小到能够快速比较( $10^9$ 、 $10^{18}$ 都是可以快速比较的)。 - + 同时,为了降低哈希冲突率,值域也不能太小。 我们定义一个把字符串映射到整数的函数 $f$ ,这个 $f$ 称为是 Hash 函数。 @@ -58,7 +58,7 @@ void cmp(const string& s, const string& t) { ### 错误率 -由于 $n$ 远大于 $m$ ,要进行约 $n$ 次比较,每次错误率 $\frac1{M}$ ,那么总错误率是 $1-(1-1/M)^n$ 。在随机数据下,若 $M=10^9 + 7$ , $n=10^6$ ,错误率约为 $\frac 1{1000}$ ,并不是能够完全忽略不计的。 +若进行 $n$ 次比较,每次错误率 $\frac1{M}$ ,那么总错误率是 $1-(1-1/M)^n$ 。在随机数据下,若 $M=10^9 + 7$ , $n=10^6$ ,错误率约为 $\frac 1{1000}$ ,并不是能够完全忽略不计的。 所以,进行字符串哈希时,经常会对两个大质数分别取模,这样的话哈希函数的值域就能扩大到两者之积,错误率就非常小了。 @@ -90,5 +90,5 @@ void cmp(const string& s, const string& t) { 题目大意:给你若干个字符串,答案串初始为空。第 $i$ 步将第 $i$ 个字符串加到答案串的后面,但是尽量地去掉重复部分(即去掉一个最长的、是原答案串的后缀、也是第 $i$ 个串的前缀的字符串),求最后得到的字符串。 每次需要求最长的、是原答案串的后缀、也是第 $i$ 个串的前缀的字符串。枚举这个串的长度,哈希比较即可。 - + 当然,这道题也可以使用 [KMP 算法](./kmp.md) 解决。 -- 2.11.0