七分钟理解什么是 KMP 算法
- 2019 年 10 月 3 日
- 筆記
????? ??? BF???KMP???BM?? ??????
KMP?? ????????????????????? KMP?? ?????? ????? ?next?? ????????????????????? KMP?? ??????????????
?????????????????~
?????https://www.bilibili.com/video/av60334201/
??
Knuth-Morris-Pratt ??????????? KMP???????????? S ???????? P ??????
????? Donald Knuth?Vaughan Pratt?James H. Morris ??? 1977 ????????? 3 ??????????
????? Donald Knuth ?????????????? ?????? Knuth ????????? ?????????
?????? KMP?? ??????
- ??????? S ??? i ?????? P ??? j ??
- ?? j = -1????????????? S[i] == P[j] ???? i++?j++???????????
?? j != -1???????????? S[i] != P[j] ???? i ???j = next[j]????????????? P?????? S ????? j – next [j] ? - ???????? P ????? next ?????????? P ???????????
???????????
????
?????? S ???? P ???
???????? P ??????
a | |||||||
---|---|---|---|---|---|---|---|
a | b | ||||||
a | b | a | |||||
a | b | a | a | ||||
a | b | a | a | b | |||
a | b | a | a | b | c | ||
a | b | a | a | b | c | a | |
a | b | a | a | b | c | a | c |
???????????????????
?? ??????????????????????????? ????????????????????????
???????????
???
a | |||
---|---|---|---|
a | b | ||
a | b | a | |
a | b | a |
???
b | |||
---|---|---|---|
a | b | ||
a | A | b | |
b | a | a | b |
???????????????????? 2?
?????? P ?????????????????? ????? ???
??????? ?? next ???next ?????“?????” ????????????????-1?
?????? next ?? ??KMP ?? ?????????
???? P ???? S ??????????????????????????
?????
?????? b ????? c ????????????? next?? ?????????? 0??????? 0 ??????????