1、概要
2、字符串
2.1 Rabin-Karp算法
关键思想是对于位置i,高效计算文本中i+1位置的子字符串散列值。文本txt中起始于位置i的含有M个字符的子字符串所对应的数为:
假设已知,则i+1位置开始,长度为M的子字符串所对应的数为:
在基于蒙特卡洛法,针对Q选取较大的质数。散列值一样时,就认为是字符串匹配。
而基于拉斯维加斯算法时,在散列值一样时,还需要比较字符串是否一致。
2.2 KMP算法
关键是构造dfa。dfa(c,j)表示模式的第j个位置的字符与字符c比较时,继续下一个字符匹配的位置。如果模式第j个位置的字符等于c,则下一个字符匹配的位置就是j+1。对于第个j
- 匹配失败时,将 dfa[][x]复制到dfa[][j]
- 匹配成功将dfa[pat.charAt(j)][j] =j+1
- 更新x
ABABAC的状态转换图为
参考资料:
https://algs4.cs.princeton.edu/home/