七分钟理解什么是 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 ??????????

Exit mobile version