两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

本篇主要講字符串匹配以及字符串算法中三個(gè)主要算法的一些內(nèi)容,幫助大家理解。

一、基本概念

字符串匹配問(wèn)題

假設(shè)文本是一個(gè)長(zhǎng)度為n的數(shù)組T[1…n],而模式是一個(gè)長(zhǎng)度為m的數(shù)組P[1…m],其中m≤n,進(jìn)一步假設(shè)P和T的元素都是來(lái)自一個(gè)有限的字母集∑的字符。數(shù)組T和P通常被稱為字符串。

如果0≤s≤n?m,并且T[s+1…s+m]=P[1…m],那么稱模式P在文本T中出現(xiàn)過(guò),且偏移為s。如果P在T中以偏移s出現(xiàn),那么稱s為有效偏移,否則為無(wú)效偏移。

字符串匹配問(wèn)題就是在T中找到P的所有有效偏移s。


二、字符串匹配算法

字符串匹配算法

(1)BF算法

BF算法,即暴風(fēng)(Brute Force)算法,也叫暴力破解法,是普通的模式匹配算法。

算法思想:將目標(biāo)串S的第一個(gè)字符與模式串T的第一個(gè)字符進(jìn)行匹配,若相等,則繼續(xù)比較S的第二個(gè)字符和 T的第二個(gè)字符;若不相等,則比較S的第二個(gè)字符和T的第一個(gè)字符,依次比較下去,直到得出最后的匹配結(jié)果。

時(shí)間復(fù)雜度:O(n*m)

int BF_match(char *T,char *P){
	int i = 0, j = 0;
	for (; T[i] != '\0' && P[j] != '\0'; i++)
		if (T[i] == P[j])
			j++;
		else
		{
			i -= j;
			j = 0;
		}
	if (P[j] == '\0') return i - j;
	else return -1;
}

(2)BM算法

Boyer-Moore字符串搜索算法是一種非常高效的字符串搜索算法。它由Bob Boyer和J Strother Moore設(shè)計(jì)于1977年。

算法思想:用壞字符表(BS)記錄每個(gè)字符在模式串中最后的位置,用好后綴表(GS)記錄模式串中與后綴匹配的位置,當(dāng)匹配失敗時(shí),取二者中最大的位移量移動(dòng),減少字符對(duì)比次數(shù)

時(shí)間復(fù)雜度:O(n/m)~O(n+m)


(3)KMP算法

KMP算法是一種改進(jìn)的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的。

算法思想:用next數(shù)組存儲(chǔ)當(dāng)前字符之前的字符串前、后綴最長(zhǎng)公共元素長(zhǎng)度,匹配失敗時(shí)通過(guò)next數(shù)組偏移

時(shí)間復(fù)雜度:O(n+m)


算法

效率

優(yōu)點(diǎn)

缺點(diǎn)

適用環(huán)境

BF

O(n*m)

簡(jiǎn)單實(shí)現(xiàn)

效率低

僅簡(jiǎn)單字符串匹配,不要求效率的情況

BM

O(n/m)~O(n+m)

效率極高

前期準(zhǔn)備工作量大

文本串較長(zhǎng)的情況

KMP

O(n+m)

效率高、穩(wěn)定性強(qiáng)

無(wú)明顯短板

要求穩(wěn)定性或文本串較短的情況


點(diǎn)贊(0)

C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:

一點(diǎn)編程也不會(huì)寫(xiě)的:零基礎(chǔ)C語(yǔ)言學(xué)練課程

解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程

從零到寫(xiě)出一個(gè)爬蟲(chóng)的Python編程課程

只會(huì)語(yǔ)法寫(xiě)不出代碼?手把手帶你寫(xiě)100個(gè)編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門(mén)課程

手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運(yùn)行等待時(shí)間)