串 KMP演算法

2021-07-10 16:44:46 字數 1208 閱讀 7221

一、串

1、串是由

0個或者多個字元構成的有限序列

2、字典序:定義字串的大小也稱為字典序。

(1)若兩個串長度為

m,n。

m>n,則m

串大於n串(2

)若m=n

,當兩串,第乙個不同的字元,哪個大的哪個串就大

二、串的儲存

1、順序儲存 

定長儲存串,放在陣列中進行操作。當溢位了後會自動截斷

2、堆分配儲存表示:動態儲存字串

複製給t。若t

已經存在,則先釋放t。

slen=s.length()l

t = new char(slen+1);

strcop(s,t);

3、鍊錶儲存

與線性表的鏈式儲存差不多,但是如果每個節點只存乙個字元的話有點浪費空間。所以一般乙個節點多個字元+

指向後面的指標。最後乙個節點如果沒有填滿就加特殊符號,如

#。鏈式儲存對串的操作,如連線是比較方便,但是總的來說沒有堆操作靈活。

一般使用堆操作

三、模式匹配

模式識別是在目標串中尋找第乙個出現模式串的位置 

1、簡單演算法:就是挨著比較,效率很低

2、kmp

演算法:效率最高

kmp的方法的核心是減少模式串需要匹配的長度。

確定k的位置:

next(j)=- -1(

j=0);

=k (找到了第乙個整數

)=0 

(其他情況)

**如下:

#include 

#include 

char tstring[20];

char pstring[20];

int next[20];

void allnext()

else

} }

int kmp(char p)

else if(pstring[j]==tstring[i])

else

} if(j

else

} int main()

printf("\n");

int v=kmp(pstring);

printf("第一次出現的地方: 

%d\n",v);

system("pause"); }

KMP串匹配演算法

串的模式匹配是串處理系統中的最重要操作之一,普通匹配演算法的時間複雜度為o m n 然而,kmp演算法的演算法時間複雜度為o m n 其主要改進是 當出現比較不等時,不需回溯指標,而是利用已經得到的部分匹配的結果將模式向後滑動盡可能遠的距離。kmp演算法的本質是基於有限自動機理論,它簡化了有限自動機...

字串演算法 KMP演算法

給定字串m和n m比n長 找出n在m中出現的匹配位置。說白了,就是乙個簡單的字串匹配。例如 首先,字串 bbc abcdab abcdabcdabde 的第乙個字元與搜尋詞 abcdabd 的第乙個字元進行比較。因為b與a不匹配,所以搜尋詞後移一位。因為b與a不匹配,搜尋詞再往後移。就這樣,直到字串...

KMP 演算法,search 子串

網上看了好多關於kmp演算法的,但是都是看的不清不楚的,用了好多術語,不明白,後來自己根據結果倒推了過程,不知對不對,暫時先記下來,kmp演算法,需要預先處理子串,然後建立乙個int型別next陣列 名字無所謂,主要是儲存一些關於子串的資訊 這裡有幾點要注意 next陣列計算方法 假定j為數字下標,...