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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LD(Levenshtein distance)莱文斯坦距离----编辑距离

發(fā)布時間:2024/9/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LD(Levenshtein distance)莱文斯坦距离----编辑距离 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

鏈接:https://ac.nowcoder.com/acm/contest/327/G
來源:??途W(wǎng)
G處女座與復讀機
題目描述
一天,處女座在牛客算法群里發(fā)了一句“我好強啊”,引起無數(shù)的復讀,可是處女座發(fā)現(xiàn)復讀之后變成了“處女座好強啊”。處女座經(jīng)過調(diào)查發(fā)現(xiàn)群里的復讀機都是失真的復讀機,會固定的產(chǎn)生兩個錯誤。一個錯誤可以是下面的形式之一:

  • 將任意一個小寫字母替換成另外一個小寫字母
  • 在任意位置添加一個小寫字母
  • 刪除任意一個字母
  • 處女座現(xiàn)在在群里發(fā)了一句話,他收到了一個回應,他想知道這是不是一個復讀機。



    /*
    算法簡介:
    萊文斯坦距離是兩個字符串序列的距離度量。形式化地說,是由一個單詞變?yōu)榱硪粋€單詞需要的最小編輯次數(shù)(編輯方式:插入,刪除,替換)。所以萊文斯坦距離也稱為編輯距離。
    定義:
    兩個字符串a(chǎn),b之間的萊文斯坦距離為:
    如果
    min(i,j) = 0;
    levab(i,j) = max(i,j);
    {length_a = 0 || lenth_b = 0,levab(a,b) = max(length_a,length_b);}
    否則,
    t = min(levab(i-1,j)+1,levab(i,j-1)+1);
    levab = min( t,levab(i-1,j-1) + ( ai!= bj ) );
    {
    如果ai != bj,編輯數(shù)+1,否則+0;
    }
    為了實現(xiàn)上述定義,我們用dp[i][j]來存s1[1…i]變成s2[1…j]需要的最小編輯數(shù)
    得出公式:
    i = 0:
    dp[i][j] = j;
    j = 0:
    dp[i][j] = i;
    i,j都不為0:
    dp[i][j] = min(min(dp[i-1][j] + 1,dp[i][j-1] + 1),dp[i-1][j-1] + (s1[i] != s2[j] ) );
    公式理解:
    1.
    i == 0 || j==0好理解,有一個為空串,當然最小編輯數(shù)就是非空串的長度
    2.
    對于i,j都非零的情況,分三種情況:
    1)假設s1[1…i-1] 變換到s2[1…j]需要最小的操作數(shù)為dp[i-1][j] = k,那么對于dp[i][j] = k+1,那么s1i就多余了,只需將s1中s1i刪除
    2)假設s1[1…i] 變換到s2[1…j-1]需要最小的操作數(shù)為dp[i-1][j] = k,那么對于dp[i][j] = k+1,只需在s1中s1i后插入s2j
    3)假設s1[1…i-1] 變換到s2[1…j-1]需要最小的操作數(shù)為dp[i-1][j] = k,那么dp[i][j]可能需要編輯也可能不需要編輯,要看s1i 是否等于s2j,如果不相等,那就要把s1i替換成s2j,否則不需要編輯,所以dp[i][j] = k + (s1i!= s2j);

    */
    ac_code:

    #include <iostream> #include <string> #include <algorithm> using namespace std; int dp[105][105]; int main() {string s1,s2;while(cin>>s1>>s2){int length1 = s1.size(),length2 = s2.size();for(int i = 0; i < length1; i++)dp[i][0] = i;for(int j = 0; j < length2; j++)dp[0][j] = j;int temp;for(int i = 1; i <= length1; i++){for(int j = 1; j <= length2; j++){temp = min(dp[i-1][j],dp[i][j-1]) + 1;dp[i][j] = min(temp,dp[i-1][j-1]+(s1[i-1]!=s2[j-1]));}}if(dp[length1][length2] <= 2)cout<<"YES"<<endl;elsecout<<"NO"<<endl; }return 0; }

    總結(jié)

    以上是生活随笔為你收集整理的LD(Levenshtein distance)莱文斯坦距离----编辑距离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。