我一直在试着用Java实现Rabin-Karp算法。但是我很难以常数时间计算滚动哈希值。我在http://algs4.cs.princeton.edu/53substring/RabinKarp.java.html上找到了一个实现,但是我仍然无法理解这两行代码的作用。
txtHash = (txtHash + Q - RM*txt.charAt(i-M) % Q) % Q;
txtHash = (txtHash*R + txt.charAt(i)) % Q;
我看了几篇关于模算术的文章,但是没有一篇文章能够让我听懂。请给我一些理解这个的指点。