演算法之KMP

2021-08-14 18:56:10 字數 689 閱讀 9564

kmp演算法是一種字串匹配演算法,時間複雜度為(m+n)。

個人對演算法學習還在初級階段。以前對字串匹配用暴力匹配演算法。

暴力匹配演算法

兩個字串,模板串mo和文字串s。

如果用暴力演算法,對於模板串mo,用i表示模板串匹配的位置。用j表示文字串匹配的位置。

1,如果從一開始匹配的上,i和j同時增加。

2,當在某一位置匹配不上時,模板串從0開始,i=0;模板串往前移,此時,j=j-i+1;;

此時,i回溯,j置為零。

int violent_match(char *a,char *b)

通過get_next 函式,得到了乙個關於如果匹配失敗後可以退回字尾已經匹配過字首相同的地方,;

kmp函式,如果mo串匹配一次後,文字串被匹過不刪除的話

int kmp(char a,char p,int sum)

}return sum;

}

對於如果是例如剪花布條題來說,匹配過一次,文字串裡匹配的部分就要不能再配了,因此
int kmp(char a,char p,int sum)

}return sum;

}

對於kmp 演算法了解還是很青澀,kmp還有優化方式,了解清楚後會再補充。

KMP演算法之k next Pk

最近在看 大話資料結構 在串這章中,講到關於kmp演算法。其中關於在一直前j個next值,如何求得j 1的值,有個公式一直不是很理解,後來查了下資料,終於搞懂了。模式字串記為p 下標從0開始 next q k 表示p q 之前的子串中,存在長度為k的相同字首和字尾,即p 0 p k 1 與p q k...

hihoCoder之KMP演算法

本分類記錄了本人在hihocode上面嘗試的結果,現在分享出來,大家一起學習。小hi和小ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。這一天,他們遇到了乙隻河蟹,於是河蟹就向小hi和小ho提出了那個經典的問題 小hi和小ho,...

初探KMP演算法之next nextval

這種演算法是d.e.knuth與v.r.pratt和j.h.morris同時發現的,因此人們稱它為克努特 莫里斯 普拉特演算法 簡稱為kmp演算法 此演算法可以在o m n 的時間數量級上完成串的模式匹配操作。其改進在於 每當一趟匹配過程中出現字元比較不等時,不需要回溯 i 指標,而是利用已經得到的...