mirror of
https://github.com/Didnelpsun/CS408.git
synced 2026-06-16 15:07:38 +08:00
Update 5-string.md
This commit is contained in:
@@ -60,6 +60,8 @@ $KMP$算法是对朴素模式匹配算法的优化。
|
||||
|
||||
但是我们一眼就能看出来$2$这个位置不需要进行对比,因为我们之前匹配过,字符串中只有最开始位置为$1$,其他位置都不为$1$,所以应该直接跳到没有对比的主串位置进行对比,而不是重复对比之前的内容。这是我们大脑默认处理的过程,$KMP$就是模拟这个处理过程。
|
||||
|
||||
主串是未知的,而模式串是已知的,所以对于串匹配的优化必然基于模式串。
|
||||
|
||||
由于模式串在最开始就是已知的,所以在失配前主串和模式串必然相等,即我们可以选择模式串中能匹配的部分重新匹配,而不是直接从头开始。
|
||||
|
||||
#### 公共前后缀
|
||||
@@ -89,7 +91,7 @@ $KMP$算法是对朴素模式匹配算法的优化。
|
||||
|
||||
#### next数组
|
||||
|
||||
失配移动位数$move$=已匹配字符数$j-1$-对应的部分匹配值$PM[j-1]$。(从而跳到开始有重复公共前缀的地方)
|
||||
失配移动位数$move$=已匹配字符数$(j-1)$-对应的部分匹配值$PM[j-1]$。(从而跳到开始有重复公共前缀的地方)
|
||||
|
||||
部分匹配值表就是子串应该跳转的索引值。当这个位失配,则子串应该跳转的索引值是失配位置前一位的$PM$值。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user