回覆列表
-
1 # uuidp495
-
2 # pietr49411
求字串next陣列值:已知String str = "aaab"; 其Next陣列值結果為 0123。已知String str = "babab"; 其Next陣列值結果為 01123。擴充套件資料next的優點KMP演算法優於簡單字串匹配演算法的根本原因就是:引入了一個next陣列,這個陣列可以儘可能的記錄相關的匹配資訊,使得在不匹配發生的時候移動的步長不再是固定的一位,加快了匹配進行的速度。在失配後,並不簡單地從目標串下一個字元開始新一輪的檢測,而是依據在檢測之前得到的有用資訊即next陣列中記錄的資訊,直接跳過不必要的檢測,從而達到一個較高的檢測效率,關於它的講解、實現和最佳化網上。
(1)當模式串第一個字元與主串某字元比較不等時,next[1]=0,主串當前指標應後移至下一字元,再和模式串中第一字元進行比較。(2)當主串第i個字元與模式串中第j個字元失配時,則假定模式串第k個字元與主串第i個字元比較,k值滿足‘t1…tk-1’=‘tj-k+1…tj-1’,即k為模式串向後移動的距離,k值有多個,為了不使向右移動丟失可能的匹配,k要取大,max{k}表示移動的最大距離,k的最大值為j-1。(3)在上面情況外,發生失配時,主串指標i不回溯,最壞情況下,模式串從第1個字元開始與主串第i個字元比較,以便不丟失可能的匹配。所以這個的答案應該是011234223456。