KMP的精神就是想要利用比對過的資訊減少比對失敗的成本,pi func找出來之後,如果比對失敗就可以直接shift到正確位置,不用再一個字元一個字元shift,以下面這個跑到一半的例子為例
https://i.imgur.com/tAGEruA.jpgT跟P比對到失敗的時候,在失敗處前面畫一條線,前面總共有5個字,這時候去查pi(5)=3,意思是P5之suffix與P之prefix可以配對到3個字元一樣,所以直接shift到剛剛畫的那條線前面剩3個字元,可以發現這三個字元往上看跟還沒shift以前是一樣的(跟pi func得知的結果一樣),也就是不用再花成本去比對前面,直接從線後面比對下去就好