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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

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

2019-11-11 05:59:26
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

子串的定位操作通常稱做串的模式匹配(其中T稱為模式串),采用定長(zhǎng)順序存儲(chǔ)結(jié)構(gòu),可以寫(xiě)出不依賴于其他串操作的匹配算法。

算法4.5:

下面是書(shū)中的偽代碼:

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

下面分析下:

這里先說(shuō)明下,這個(gè)S[0],T[0]這個(gè)地方存儲(chǔ)了整個(gè)串的大小。

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

下面這張圖,提現(xiàn)了這個(gè)過(guò)程(T='abcac'和主串S,pos=1)

這節(jié)就到這,下一節(jié)講解數(shù)據(jù)結(jié)構(gòu)里面的第一個(gè)難點(diǎn):

KMP算法!


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 城固县| 莎车县| 调兵山市| 德兴市| 固原市| 太保市| 冷水江市| 邵阳市| 册亨县| 壤塘县| 鄯善县| 榆中县| 苗栗市| 潍坊市| 金山区| 北辰区| 余庆县| 蒙城县| SHOW| 清涧县| 宝清县| 花垣县| 邹平县| 巴南区| 霍林郭勒市| 昌宁县| 濉溪县| 大田县| 江山市| 栾川县| 龙里县| 荆门市| 灵丘县| 阿瓦提县| 内江市| 乌拉特后旗| 鲁甸县| 遵义市| 双桥区| 郎溪县| 家居|