字符串hash

就是把某个字符串把某个串转化成一个数,使相同的串转化成的数一定相同,不同的串转化成的数尽量不同。

最常用的是进制哈希。\(hash[i]=(hash[i-1]*p+(ll)s[i])\%mod\)(其中\(p\)没有要求,但一般取一个质数,如\(131,13331\)等;\(mod\)要取一个大数,最方便的就是开\(unsigned\ long\ long\),即\(mod=2^{64}\)

然后我们对于一个串做处理后,就可以知道任意\(l\)\(r\)位的字符串的哈希值了。具体的,有\(hash[l\sim{r}]=(hash[r]-hash[l-1]*p^{r-l+1}\%mod+mod)\%mod\)。所以我们要预处理\(p^i\)

防止冲突可以用双\(hash\),即取两个不同的模数。

学这个主要是为了避免写\(kmp\)

posted @ 2020-11-02 21:31  andysj  阅读(76)  评论(0编辑  收藏  举报