串的模式匹配演算法:子串的定位運算
演算法思想:
設有主串s,模式t。有 i 和 j 分別指向s和j的首個元素。(i=1;j=1;)
設有pos。pos指t在s中首次出現的位置的首位址。初始指向s的首元素。
將t中的首個元素與s中首個元素對比
①若相同:i++與j++對比
關於儲存:採用定長順序儲存結構。
(ps:從下標為1的陣列分量開始儲存,下標為0的分量閒置不用。)
**實現:
#include#include#define maxlen 255 //串的最大長度
//採用靜態順序儲存結構(定長)
typedef structsstring;
//bf演算法
//查詢 模式t 在 主串s 中第pos個字元開始第一次出現的位置,並返回
//若不存在,則返回0 (t非空,1<=pos<=s.length)
int index_bf(sstring s,sstring t,int pos)
else
} if(j>t.length) //匹配成功
return i-t.length;//主串指標位置往回退模式長度個單位,就回到了該模式在主串中第一次出現的位置
else //匹配失敗
return 0; //返回0(順序儲存的字串是從下標為1的陣列分量開始儲存的,下標為0的分量閒置不用) }
//主函式
int main()
時間複雜度:(主串s長為n,子串t長為m)
最好的情況:o(n+m)每次不匹配的都是模式串t的首字母(不成功就直接換下乙個來比較)
最壞的情況:o(m*n)每次不成功的匹配都是模式串t的最後乙個字母(每次快成功了又從頭開始)
總的來說,複雜度還是挺高的,但是符合人的基本思維,易於理解,程式設計實現容易。
如果要提高效率,試試kmp演算法(但是kmp就沒這麼好理解咯)。
BF演算法 串的模式匹配
bf演算法,即暴風 brute force 演算法,是普通的模式匹配演算法,bf演算法的思想就是將目標串s的第乙個字元與模式串t的第乙個字元進行匹配,若相等,則繼續比較s的第二個字元和 t的第二個字元 若不相等,則比較s的第二個字元和t的第乙個字元,依次比較下去,直到得出最後的匹配結果。bf演算法是...
樸素的串模式匹配(C語言實現) 串模式匹配
從主串 s 的第 pos 個字元起和模式 t 的第乙個字元比較之,若相同,則繼續比較後續字元 否則從主串 s 的下乙個字元起再重新和模式 t 的字元比較之。例 s jinanshi t nan 當採用定長順序儲存結構時,實現此操作的演算法如下 int index sstring s,sstring ...
BF演算法 串的模式匹配演算法
子串的定位運算通常稱為串的模式匹配或串匹配。串的模式匹配設有兩個字串s和t,設s為主串,也稱正文串 設t為子串,也稱模式。在主串s中查詢與模式t相匹配的子串,如果匹配成功,確定相匹配的子串中的第乙個字元在主串s 現的位置。著名的模式匹配演算法有bf演算法和kmp演算法,下面介紹bf演算法。模式匹配不...