求最佳匹配 KMP演算法

2021-06-06 03:42:46 字數 1147 閱讀 5821

可行頂標

l是乙個關於結點的函式,

l(x)

是頂點x

對應的頂標值。可行頂標對於圖中的每條邊

(x,y)都有

l(x)+l(y)>=w(

x,y)

相等子圖:只包含

l(x)+l(y)=w(

x,y)

的邊的子圖

定理:如果乙個相等子圖中包含完備匹配,那麼這個匹配就是最優匹配

演算法流程:

設頂點xi

的頂標為a[i

],頂點

yi的頂標為b[i

]ⅰ.初始時,a[i

]為與xi相關聯的邊的最大權值,

b[j]=0

,保證a[

i]+b[j]>=w(

i,j)

成立ⅱ.

當相等子圖中不包含完備匹配時,就適當修改頂標以擴大相等子圖,直到找到完備匹配為止

ⅲ.修改頂標的方法

當從xi

尋找交錯路失敗後,得到一棵交錯樹,它的所有葉子節點都是

x節點,對交錯樹中

x頂點的頂標減少d值,

y頂點的頂標增加

d值,對於圖中所有的邊

(i,j

),可以看到:

(1)i和j

都不在交錯樹中,邊

(i,j

)仍然不屬於相等子圖。  

(2)i和j

都在交錯樹中,邊

(i,j

)仍然屬於相等子圖。

(3)i

不在交錯樹中,

j在交錯樹中,a[i

]+b[j]

擴大,邊

(i,j

)不屬於相等子圖。

(4) i

在交錯樹

,j不在交錯樹中,邊

(i,j

)有可能加入到相等子圖中。

為了使a[i

]+b[j]>=w(

i,j)

始終成立

,且至少有一條邊加入到相等子圖中

,d=min,

i在交錯樹中

,j不在交錯樹中。

KMP模式匹配演算法求next陣列

j12 3456 78值a baab cacnext01 1223 12j是字串中的位置 從1開始計算 值是字串對應j位置的字母,next是next陣列中的值。下面是計算方法 1 首先next 1 0,next 2 1 這兩個是固定不變的 2 除了j 1和j 2時,求解next j 首先我們要獲取到...

KMP匹配演算法

1.概述 在講解kmp匹配演算法之前,我們不妨來看看我們用暴力法是怎麼完成字串的匹配的.在我們的目標串t 101011011,和模式串p 110中,我們在t中找尋p第一次出現在t中的下標.通過上圖,我們發現我們利用暴力匹配法,在某次失敗後我們只能非常機械的一步一步移動我們的模式串p.所以我們理解了上...

演算法 kmp匹配演算法

執行結果 心得收穫 完整 計算next陣列 next陣列的目標是求得從開始到當前位置的字串相同最大前字尾長度為多少 該值的作用是在當前位置的字元匹配失敗時,匹配字串應該從那裡開始繼續匹配,而不用回到開頭 時間複雜的 o m void calnextarray const string str,int...