kmp字串匹配演算法

2021-10-09 21:19:16 字數 1407 閱讀 7788

prefix_table next 陣列

gtgtgcf為例子,他的字首表,前字尾相等的最大長度,不包含本身。

--------------------- -1

g----------------------0

gt---------------------0

gtg--------------------1

gtgt-------------------2

gtgtg------------------3

gtgtgc-----------------0

gtgtgcf-----------------0

整體後移一位

g-------------------- -1

gt---------------------0

gtg--------------------0

gtgt-------------------1

gtgtg------------------2

gtgtgc-----------------3

gtgtgcg----------------0

gtgtgcgf---------------0

得到字首陣列:

g  t  g  t  g  c  g  f

-1 0 0 1 2 3 0 0

得到過程**:

void

prefix_table

(char pattern,

int prefix,

int n)

else

else len = prefix[len-1]

;}}}

void

move_prefix

(int prefix,

int n)

prefix[0]

=-1;

}

合併一下

void

prefix_next

(char pattern,

int prefix,

int n)

else}}

}

查詢過程:

定義被查詢串txt, 長度m, 查詢串pattern, 長度n , 兩個指標 i , j 分別指向 兩個串。

如果相等,兩個指標都後移,如果不相等,那麼j = prefix[j]

void

kmp_search

(char text,

char pattern)

if(text[i]

== pattern[j]

)else}}

}

KMP演算法 字串匹配

kmp演算法基本思想 我們在用常規的思想做 字串匹配時候是 如 對如 字元如果 t abab 用p ba 去匹配,常規思路是 看 t 第乙個元素 a 是否 和p 的乙個 b 匹配 匹配的話 檢視各自的第二個元素,不匹配 則將 t 串的 第二個元素開始 和 p 的第乙個匹配,如此 一步一步 的後移 來...

KMP字串匹配演算法

kmp核心思想 計算模式串的next陣列,主串的索引在比較的過程中不回朔 ifndef kmp h define kmp h class kmp endif include kmp.h include include include using namespace std int kmp calcu...

KMP字串匹配演算法

在介紹kmp演算法之前,先介紹一下bf演算法。一.bf演算法 bf演算法是普通的模式匹配演算法,bf演算法的思想就是將目標串s的第乙個字元與模式串p的第乙個字元進行匹配,若相等,則繼續比較s的第二個字元和p的第二個字元 若不相等,則比較s的第二個字元和p的第乙個字元,依次比較下去,直到得出最後的匹配...