串的學習(一) 樸素模式匹配演算法

2021-10-11 17:44:39 字數 1415 閱讀 2387

1.串與線性表的區別

串是一種特殊的線性表,資料元素之間呈線性關係。它與線性表的不同是線性表中的資料元素可以存放任意的資料元素,而串中資料元素只能存放字符集(中文字元、英文本元、數字字元、標點字元等)。串的增刪改查通常以子串為資料物件。

2.字符集編碼

字符集:

英文本元-ascii字符集(只含有英文本元),對於乙個英文本母來說,乙個英文本母佔1b。

中英文-unicode字符集(既含有英文本元,又含有中文字元)

unicode字符集編碼方式有utf-8和utf-16等編碼方案(編碼方案可看作字符集的加工函式,使其加工為二進位制編碼。),對於utf-8來說,乙個中文佔3b

3.串的順序儲存和鏈式儲存

串的順序儲存定義:

#define maxsize 100

typedef struct string

sstring;

串的鏈式儲存定義:

typedef

struct stringnode

*string;

乙個結點中應儲存多個字元,不然由於指標所佔容量為4b,而資料元素所佔容量為1b,造成儲存密度低。若無足夠資料元素,可加入#填充。

3.字串的特殊操作

//從字串中取出子串

bool

substring

(sstring &sub, sstring s,

int pos,

int len)

sub.length = len;

return

true

;}

//比較兩字串的區別

intstrcompare

(sstring s, sstring t)

re

//按搜尋是否滿足條件的字串子串索引

intindex

(sstring s, sstring t)

return0;

}

4.樸素模式匹配演算法效能

//樸素模式匹配演算法

intindex

(sstring s, sstring t)

else}if

(j > t.length)

return k;

else

return0;

}

若模式串長度為m,主串長度為n,

則匹配成功的最好時間複雜度為o(m),匹配失敗的最好時間複雜度為o(n-m+1),近似於o(n)

匹配成功/失敗的最差時間複雜度為o(m*(n-m+1))。近似為時間複雜度o(mn)。

串之樸素的模式匹配演算法

一 串的模式匹配的定義 這個問題其實就是乙個字串在乙個大的字串中的定位問題。這種子串的定位問題的操作通常叫做串的模式匹配 二 舉例說明 假如主串是s qbfhilmeach 模式串 p hilk 現在我們需要在主串中找到模式串。它的匹配過程如下 直到匹配成功 簡單得來說,就是對主串的每乙個字元作為子...

字串模式匹配演算法之一 樸素模式匹配演算法

被搜尋的字串稱為主串,待搜尋的字串稱為模式串。樸素模式匹配演算法的基本思想 對主串的每乙個字元作為子串開頭,與模式串進行匹配。對主串做大迴圈,每個字元開頭做模式串長度的小迴圈,直到匹配成功或全部遍歷完成為止。實現非常簡單 int strstr char haystack,char needle 樸素...

串 樸素匹配演算法

c語言極簡版 include include include 返回子串t在主串s中第pos個字元之後的位置。若不存在,則函式返回值為0。intindex char s,char t,int pos else 指標後退重新開始匹配 if j 1 j超出模式串的長度 return i 2 2為模式串的長...