KMP再思考:為什么要用最長公共前后綴,為什么要用公共前后綴


1.如果不用最長的,則會丟失可匹配部分,也就是本來可能匹配的,結果卻不能匹配。

 

2.因為需要保證比較位置之前的字符串都一致了,如果不用公共前后綴,則可能導致比較位置之前的字符串不一致。

理由其實很簡單,因為把前綴移到后綴的位置,而比較指針不變,如果后綴(這時已經不是真正的后綴了)的結束不是貼着比較指針的話,就

不能保證比較指針前的字符和待比較串一致。

 

選擇公共前綴是必定的,因為如果想要在待比較串中找出模式串,那么一定要和模式串的開頭匹配,也就是和前綴匹配。

但是選擇的不是公共后綴的話,也就是結尾不貼近比較指針的話,就會導致上面的問題。

3.就算使用最長串,是否還是會有遺漏的情況存在呢?

那么我們可以假設使用最長串,看看有沒有遺漏的情況發生。

假如在過程中發生了匹配。所謂的匹配是指在比較指針之前要和待比較串完全匹配,如果不完全匹配就沒有意義,下圖的紅色框和長的綠色框是假設的匹配情況。

 

但是根據我們 公共前后綴的定義,應該出現如下的最長公共前后綴,所以這種匹配如果存在,只能說明我們之前找的不是最長公共前后綴,比公共前后綴短。

但是當前情況下,並不成立,因為兩者根本不相等。如果是相等的話,就會如上所言,之前找到的不是最長前后綴。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM