日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

4.3串的模式匹配算法(BF算法)

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4.3串的模式匹配算法(BF算法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

4.3.1 求子串位置的定位函數Index(S,T,pos)

子串的定位操作通常稱做串的模式匹配(其中T稱為模式串),采用定長順序存儲結構,可以寫出不依賴于其他串操作的匹配算法。

算法4.5:

下面是書中的偽代碼:

int Index(SString S, SString T, int pos) { // 返回子串T在主串S中第pos個字符之后的位置。// 若不存在,則函數值為0。// 其中,T非空,1≤pos≤StrLength(S)。int i = pos;int j = 1;while (i <= S[0] && j <= T[0]) {if (S[i] == T[j]) // 繼續比較后繼字符{ ++i;++j;}else // 指針后退重新開始匹配 {i = i - j + 2;j = 1;}}if (j > T[0]) return i - T[0];else return 0; } // Index


下面分析下:

這里先說明下,這個S[0],T[0]這個地方存儲了整個串的大小。

這個代碼的巧妙之處在于i=i-j+2和j=1這個地方,這個i=j-j+2,可以讓i進行后移,也就是S后移,這里j=1,的意思如下:舉個例子,當T中是ABC,而S是ABABABC,pos為1,那么j=1的作用就是清理,什么叫清理,意思就是當發現S中只有前兩個字母相似,而沒有第三個,這時重新計數。當然i也要進行回溯。


下面這張圖,提現了這個過程(T='abcac'和主串S,pos=1)


這節就到這,下一節講解數據結構里面的第一個難點:

KMP算法!



總結

以上是生活随笔為你收集整理的4.3串的模式匹配算法(BF算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。