Understanding how rolling hash works with modulus in Rabin Karp algorithm
You calculate it the same way you calculate 23456
, but always with modulo 101
.
(((23 - (10^4 mod 101))*10) mod 101 + 6) mod 101 = 24.
which is the value you want because 23456 mod 101 = 24
.
Answer by @dejvuth is right - i would add this specifically when doing rabin-karp is that sometimes you may end up with a -ve modulus value - in that case it is better to take the +ve equivalent of that modulus value - so that checking if the same modulus was seen before is easier.
For example:
with this pattern "abcdabc"
-
and hash function:
hash(i) = (49*S[i]+7*S[i+1]+1*S[i+2])%1123
Results in:
"abc" -> 1046
"bcd" -> 1103
"cda" -> 33
"dab" -> 62
"abc" -> -77
second occurence of "abc"
results is -77
that is modulo equivalent of 1046
since (-77 + 1123 = 1046)
PS: i don't have enough "reputation" at this time to add this as a comment..