計算機中時常需要查詢乙個字串(假定為字串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的 最長公共元素表 前字尾最長序列長度 失配時,模式串向右移動的位數為 已...