码迷,mamicode.com
首页 > 其他好文 > 详细

字符串hash(类似于进制的hash)

时间:2019-05-18 12:24:12      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:答案   tls   base   前缀   前缀和   就是   bsp   字符串   strcmp   

分段字符串哈希方法

对于一串字符串 $orztrj$ ,我们有一种哈希的方法,该串哈希值为:

$((((o * base + r) * base + z) * base + t) * base + r) * base + j$

$o * base^5 + r * base^4 + z * base^3 + t * base^2 + r * base^1 + j * base^0$

其中 $base$ 设成一个素数,记得取模

于是哈希数组如下:

$hash[1] = o * base^0$

$hash[2] = o * base^1 + r * base^0$

$hash[3] = o * base^2 + r * base^1 + z * base^0$

$hash[4] = o * base^3 + r * base^2 + z * base^1 + t * base^0$

$hash[5] = o * base^4 + r * base^3 + z * base^2 + t * base^1 + r * base^0$

$hash[6] = o * base^5 + r * base^4 + z * base^3 + t * base^2 + r * base^1 + j * base^0$ 

当我们判一个串 $deep$ 是否是它的子串时,我们进行一个一个比对

比较 $deep$ 和 $ztrj$ , 此时$l = 3,r = 6$,要得出 $ztrj$ 的哈希值,我们只需算出 $hash[6] - hash[3-1=2] * base^{r-l+1}$ 就是答案。(类似与前缀和)

所以除了 $KMP$ 和 $STLstrcmp$ ,字符串 $hash$ 也不失为一种可行之法。

字符串hash(类似于进制的hash)

标签:答案   tls   base   前缀   前缀和   就是   bsp   字符串   strcmp   

原文地址:https://www.cnblogs.com/QuickSilverX/p/10885299.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!