七分鐘理解什麼是 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 ??????????

