KMP演算法推導

2021-07-13 05:48:05 字數 2265 閱讀 7219

申明:此文系博主對huge對kmp演算法的推導過程的加工整理而成,在讀此文之前,如果對kmp演算法不是非常了解的,可以去到閱讀有關kmp的相關知識,如果已經非常了解,那就請繼續吧。。

有了以上的資料了解後,讓我們一起來推導和構建kmp演算法吧。

定義:a是問題中模式串(短串),長度為n;

b是問題中的文字串(長串),長度為m;

其中,a[i]代表a字串的第i位

b[j]代表b字串的第j位

a[i,j]代表a字串的第i位到第j位(注:下標從1開始)

b[i,j]代表b字串的第i位到第j位(注:下標從1開始)

sign(i,j)為符號函式,取值為0和1:

a[i] = b[j],sign(i,j) = 1;

a[i] != b[j],sign(i,j) = 0;

重點問題1:原始問題的等價表示

原始問題轉化為以上公式的判定問題,判定公式最大值是否等於n;

對公式1進行優化,求和部分沒有必要每次都運算n次,原因在於:在第一次有sign(i,j+i-1) = 0的時候,就應該停止了;因此我們來假設一下,設第一次sign函式在sign(i,j+i-1) = 0的位置時,i的值為k+1,則公式1就可以寫為下面的簡化形式:

這裡不難發現,以上兩個公式所求問題是完全等價的。

重點2:推導公式2等價問題的性質

公式2中,存在兩個不定量j和k,j與文字串有關,k與答案有關,因此使用乙個函式f(j) = k 來完成從文字串到答案的對映。

故原問題就變成:尋找f(j)函式的最大值,等價為:max(f(j)) ?= n,設:

f(j) = k                條件1

f(j+e) = l             條件2

其中,l > k ,e表示滿足條件的最小正整數,具體含義為:將來某一時刻能夠找到乙個後面的位置,使得其匹配成功的串長度比在它之前匹配成功的所有串長度k都更大,於是上述兩個條件可等價為如下:

條件1等價為:a[1,k] = b[j,j+k-1]

條件2等價為:a[1,l]  = b[j+e,j+e+l-1]

將兩個條件中串對齊,看看我們能推出什麼性質,並且這個性質是原問題的充分不必要條件(這個性質,雖然與原問題不等價,但是不滿足這一性質,原問題肯定不成立):

另由j+e+l-1 = j+k-1 推出來 : l = k-e,於是再代入條件2的等價式中,有:

a[1,l] = a[1,k-e]=b[j+e,j+k-1],又由於公式1,所以a[1,l] = a[1+e,k]

由此,我們推導出f(j+e) > f(j)的乙個重要性質,用短串來表達就是:a[1,k-e] = a[1+e,k],也就是通常所說的前半段等於後半段

另外由於e是滿足條件的最小正整數,所以a[1,k-e] = a[1+e,k]的含義如下:

1)物理含義是:前後最大長度相等的片段;

2)當k+1位置匹配失敗的時候,如果此時a串前k位匹配成功了,說明從b串的j+e位開始匹配,最低能夠匹配成功k-e位,那麼下一次判斷,應該是用a的k-e+1位跟b串的j+k位進行比較(對於這個性質的理解很重要,在重點三中會用到)。

重點3:推導k和e的對映關係

設有函式g(k)=k-e等價於a[1,k-e] = a[1+e,k],現在討論g(k+1)值:

操作1:當a[k-e+1] = a[1+k]時,g(k+1)=g(k)+1

操作2:當a[k-e+1] != a[1+k]時,說明:a[1,k-e]a[k-e+1] 與串  a[e+1,k]a[k+1] 在最後一位上匹配失敗了;將 a[e+1,k]a[k+1] 看做是文字串(與b串的性質類似),a[1,k-e]a[k-e+1] 看作模式串,根據以上推導,在k-e位匹配成功,k-e+1匹配失敗的情況下,我們應該用a[g(k-e)+1](等價於a[g(g(k))+1])位於a[k+1]比較,如果兩者相等,則進行操作1,否則繼續操作2。

注意:由於我們的字串下表是從1開始的,所以定義邊界條件g(1)=0;如果從0開始,則g(1)=-1;

這裡,對於函式g的理解非常重要,對於kmp演算法的不同實現,其實就是在維護函式g中不同的變數值,由於變數涉及到k和e兩個值,所以相應的,我們可以定義如下三種不同的g函式,每一種不同的g函式都對應了不同的kmp演算法的具體實現:

g(k)= k-e

g(k)= -e

g(k)= e

演算法 KMP演算法

kmp演算法主要解決的問題就是在字串 主串 中的模式 pattern 定位問題。記主串為t,模式串為p,則kmp演算法就是返回p在t 現的具體位置,如果沒有出現則返回 1。如果 i 指標指向的字元和 j 指標指向的字元不一致,那麼把 i 右移1位,j 從0位開始,從新開始匹配 如果 i 指標指向的字...

BP演算法推導

反向傳播演算法是深度學習的基礎之一,其主要的核心就是對代價函式 e 關於權重 w 或偏置 b 的偏導數 的表示式。這個表示式代表在改變權值和偏置時,代價函式變化的快慢。使用 w l 表示從 l 1 層的 k 神經元到 l 層的 j 神經元上的權重。之所以 l 的序號在 l 1 層的序號之前,是因為後...

EM演算法推導

給定觀測樣本集 求帶有隱變數模型的最大似然。似然函式 l theta logp y theta log sum zp y,z theta log p y z,theta p z theta 將似然函式減去上一步的似然函式 begin l theta l theta log p y z,theta p...