KMP演算法小結

2021-09-22 08:24:11 字數 714 閱讀 1181

計算機中時常需要查詢乙個字串(假定為字串t)又稱為模式字串在另乙個字串的出現的位置。比較容易想到的是設定兩個指標,乙個指向模式字串,另乙個指向主串,依次比較,如果另個字元相等,則兩個指標同時向後移動,如果不等,將主串從初位置向後移動,模式串的指標重新設定指向模式串的頭,重複上面動作,直到找到或者字串結束。此方法易於理解,但分析其時間複雜度由於有兩個for迴圈,時間複雜度為o(n^2),這種方法又叫暴力列舉法,那麼,有沒有更聰明的方法呢,答案是肯定的,這就是今天我們要介紹的kmp演算法。

首先給出演算法**:

int

kmp(

char

*s,char

*t,int

*next)

else

j = next[j];}

if(j == len2)

return i - j;

else

return-1

;}

求next陣列**如下

void

get_next

(char

*p,int

*next)

}

**優化如下:

void

get_nextval

(char

*p,int

*next)

}

KMP演算法小結

posted on 2011 06 14 byhuangchao 主要看了這裡,感覺講的十分的不錯,總結一下。首先宣告要搜尋的串為s,設長度為n,要匹配的串為m,設長度為m.先考慮暴力的演算法,暴力的演算法是遍歷s的每乙個字元,然後從這個字元開始和m串進行匹配。時間複雜度為o nm 怎麼在此基礎上進...

KMP演算法小結

主要看了這裡,感覺講的十分的不錯,總結一下。首先宣告要搜尋的串為s,設長度為n,要匹配的串為m,設長度為m.先考慮暴力的演算法,暴力的演算法是遍歷s的每乙個字元,然後從這個字元開始和m串進行匹配。時間複雜度為o nm 怎麼在此基礎上進行優化?假設現在從某個位置 設為s 開始和m串進行匹配,如果匹配不...

KMP演算法小結

文字串長度為n,模式串長度為m,匹配過程的時間複雜度為o n 計算next的o m 時間,kmp的整體時間複雜度為o m n 步驟 文字串s bbc abcdab abcdabcdabde 模式串p abcdabd 1.尋找p的 最長公共元素表 前字尾最長序列長度 失配時,模式串向右移動的位數為 已...