字符串匹配算法

字符串匹配算法有:暴力匹配、KMP、BM

KMP算法

先計算出要匹配的字符串的特徵數值(字符出現頻率高的字符串最長長度),依據特徵值指導字符跳轉。

BM算法

        BM算法和KMP算法的差別是對模式串的掃描方式自左至右變成自右至左。另一個差別是考慮正文中可能出現的字符在模式中的位置。這樣做的好處是當正文中出現模式中沒有的字符時就可以將模式大幅度滑過正文。

        BM算法的關鍵是根據給定的模式W[1,m],,定義一個函數d: x->{1,2,…,m},這裏x∈∑。函數d給出了正文中可能出現的字符在模式中的位置。

參考:https://www.cnblogs.com/huifeidezhuzai/p/9222366.html

KMP匹配算法

大致匹配流程

KMP依賴數據:

1、查找對象字符串的特徵值分析,所謂的特徵值就是字符出現頻率高的字符串最長長度,以數字表示頻率值;

2、源字符串、查找對象字符串;

上圖中查找對象字符串的特徵值計算方式如下:

 

KMP算法實現與優化

待補充完善

/* 獲取字符信息 */
void GetNext(char T[],int next[])
{
	next[1]=0;
	j=1;k=0;
	while(j<=strlen(T))
	{		
		//此處應包含string頭文件
		if((k==0)||(T[j]==T[k]))
		{
			next[j]=k;
			j++;
			k++;
		}
		else 
			k=next[k];
	}
}

int main()
{
    int src[]={10,30,20,51,60,33};

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章