天天看點

資料結構模式比對——BF算法

基本思想:

從主串S的第0個字元開始和模式T的第0個字元進行比較,若相等則繼續比較兩者的後續字元;

否則,從主串S的第一個字元開始和模式T的第0個字元進行比較,重複上述過程,直到T中的字元全部比較完畢,則說明比較失敗。

資料結構模式比對——BF算法

1.在串S和串T中設比較的起始下标I和j;

2.循環知道S或T的所有字元比較完;

2.1如果s[i]==T[j],繼續比較S和T的下一個字元;

2.2否則,将i和j回溯(i=i-1,j=0),準備下一趟比較;

3.如果T中所有字元均比較完,則比對成功,傳回比對的起始比較下标(i-j);否則比對失敗,傳回-1;

代碼實作如下

資料結構模式比對——BF算法

設串S的長度為n,串T長度為m,在比對成功的情況下,考慮兩種極端情況。

(1)最好:不成功的比對都發生在串T的第一個字元。

所有比對成功的情況可能有n-m+1種

最壞情況:不成功的比對都發生在串T的最後一個字元。

為什麼BF算法的時間性能低?

在每趟比對不成功時存在大量回溯,沒有利用已經部分比對的結果。

如何在比對不成功的時候主串不回溯?

主串不回溯,模式就需要向右滑動一段距離。

是以KMP算法很好的解決這個問題