国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

4.3串的模式匹配算法(BF算法)

2019-11-11 06:03:14
字體:
來源:轉載
供稿:網友

4.3.1 求子串位置的定位函數Index(S,T,pos)

子串的定位操作通常稱做串的模式匹配(其中T稱為模式串),采用定長順序存儲結構,可以寫出不依賴于其他串操作的匹配算法。

算法4.5:

下面是書中的偽代碼:

int Index(SString S, SString T, int pos) { 	// 返回子串T在主串S中第pos個字符之后的位置。	// 若不存在,則函數值為0。	// 其中,T非空,1≤pos≤StrLength(S)。	int i = pos;	int j = 1;	while (i <= S[0] && j <= T[0]) 	{		if (S[i] == T[j]) // 繼續比較后繼字符		{  			++i;			++j;		}		else // 指針后退重新開始匹配 		{			i = i - j + 2;			j = 1;		}	}	if (j > T[0]) 		return i - T[0];	else 		return 0;} // Index

下面分析下:

這里先說明下,這個S[0],T[0]這個地方存儲了整個串的大小。

這個代碼的巧妙之處在于i=i-j+2和j=1這個地方,這個i=j-j+2,可以讓i進行后移,也就是S后移,這里j=1,的意思如下:舉個例子,當T中是ABC,而S是ABABABC,pos為1,那么j=1的作用就是清理,什么叫清理,意思就是當發現S中只有前兩個字母相似,而沒有第三個,這時重新計數。當然i也要進行回溯。

下面這張圖,提現了這個過程(T='abcac'和主串S,pos=1)

這節就到這,下一節講解數據結構里面的第一個難點:

KMP算法!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 句容市| 和顺县| 宁远县| 奈曼旗| 信阳市| 东明县| 潮安县| 望奎县| 陕西省| 安福县| 九台市| 宁化县| 眉山市| 阳高县| 临海市| 酒泉市| 叙永县| 三亚市| 通山县| 都昌县| 吉安市| 呈贡县| 濮阳县| 大厂| 滁州市| 大连市| 岳西县| 炎陵县| 固阳县| 江油市| 永平县| 徐闻县| 自贡市| 大化| 榆社县| 宝兴县| 阿城市| 汶川县| 乌拉特中旗| 昌吉市| 台州市|