日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】最小编辑距离 算法原理

發布時間:2025/3/21 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】最小编辑距离 算法原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題

最小編輯距離 Minimum Edit Distance

關于兩個字符串s1,s2的差別,可以通過計算他們的最小編輯距離來決定。
設A、B為兩個字符串,狹義的編輯距離定義為把A轉換成B需要的最少刪除(刪除A中一個字符)、插入(在A中插入一個字符)和替換(把A中的某個字符替換成另一個字符)的次數,用ED(A,B)來表示。直觀來說,兩個串互相轉換需要經過的步驟越多,差異越大。

例如 s1 = "12433" 和 s2 = "1233";
則可以通過在s2中間插入4得到12433與s1一致。
即 d(s1,s2) = 1 (進行了一次插入操作)

性質

計算兩個字符串s1+c1, s2+c2的編輯距離有這樣的性質:

1. d(s1,"") = d("",s1) = |s1|d("c1","c2") = c1 == c2 ? 0 : 1; 2. d(s1+c1,s2+c2) = min( d(s1,s2)+ c1==c2 ? 0 : 1 ,d(s1+c1,s2),d(s1,s2+c2) );

第一個性質是顯然的。
第二個性質: 由于我們定義的三個操作來作為編輯距離的一種衡量方法,于是對c1,c2可能的操作只有:

1. 把c1變成c2 2. s1+c1后刪除c1 d = (1 + d(s1, s2 + c2)) 3. s1+c1后插入c2 d = (1 + d(s1 + c1, s2))對于2和3的操作可以等價于: _2. s2+c2后添加c1 d = (1 + d(s1, s2 + c2)) _3. s2+c2后刪除c2 d = (1 + d(s1 + c1, s2))

因此可以得到計算編輯距離的性質2。

復雜度分析

從上面性質2可以看出計算過程呈現這樣的一種結構(假設各個層用當前計算的串長度標記,并假設兩個串長度都為 n )
可以看到,該問題的復雜度為指數級別 3 的 n 次方,對于較長的串,時間上是無法讓人忍受的。

分析: 在上面的結構中,我們發現多次出現了 (n-1,n-1), (n-1,n-2)……。換句話說該結構具有重疊子問題。再加上前面性質2所具有的最優子結構。符合動態規劃算法基本要素。因此可以使用動態規劃算法把復雜度降低到多項式級別。

動態規劃求解

首先為了避免重復計算子問題,添加兩個輔助數組。

一. 保存子問題結果。
M[ |s1| ,|s2| ] , 其中M[ i , j ] 表示子串 s1(0->i) 與 s2(0->j) 的編輯距離

二. 保存字符之間的編輯距離.
E[ |s1|, |s2| ] , 其中 E[ i, j ] = s1[i] = s2[j] ? 0 : 1

三. 新的計算表達式
根據性質1得到

M[ 0,0] = 0; M[ s1i, 0 ] = |s1i|; M[ 0, s2j ] = |s2j|;

根據性質2得到

M[ i, j ] = min( m[i-1,j-1] + E[ i, j ] ,m[i, j-1] + 1 ,m[i-1, j] + 1 );

復雜度
從新的計算式看出,計算過程為

i=1 -> |s1|j=1 -> |s2|M[i][j] = ……

因此復雜度為 O( |s1| * |s2| ) ,如果假設他們的長度都為n,則復雜度為 O(n^2)

改進

當s[i]和s[j]相等時,代價為0,必然為最小值,所以首先判斷兩字符是否相等,若相等則直接判定M[i][j]=M[i-1][j-1],判斷下個。這樣可以省很多計算。

工具宏:直接用一個宏來完成“求取三者最小值”的功能。不同于遞歸,宏定義消耗很小,完全可以放心使用。

1: #ifndef _MIN(xyz) 2: #define _MIN(xyz) ((x<y)?((x<z)?x:z):((y<z)?y:z)) 3: #endif // _MIN(xyz)

轉載于:https://www.cnblogs.com/sk-blogs/articles/3681693.html

總結

以上是生活随笔為你收集整理的【转】最小编辑距离 算法原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。