1. 程式人生 > >最短編輯距離問題 : Levenshtein Distance

最短編輯距離問題 : Levenshtein Distance

個人覺得只要你能明白edit陣列的含義就可以理解狀態轉移方程了。
/*
可以用來表示字串的相似度?
*/
#include <bits/stdc++.h>
using namespace std;
int edit[100][100] ;//edit(i,j)表示從 A的前i個字元 轉化成 B的前j個字元所需的操作次數
int str_equal(char &a,char &b){ //判斷兩個字元是否相等,相等返回0,否則返回1
    return 1^(a==b);
}

int Levenshtein(char *a, char *b ,int al,int bl){ //返回兩個字串的最短編輯距離
    memset(edit , 0 , sizeof edit);
    edit[0][0] = 0 ;
    for (int i = 1 ; i <= al ;i++)
        edit[i][0] = i;
    for (int j = 1 ; j <= bl ;++j)
        edit[0][j] = j;
    for (int i = 1 ; i <= al ; ++i)
    for (int j = 1 ; j <= bl ;++j){
        edit[i][j] = min(min( edit[i][j-1]+1 , edit[i-1][j]+1 ) , edit[i-1][j-1]+str_equal(a[i-1],b[j-1]));//edit(i,j)可由三種狀態轉變來
        //cout<<"i j "<<i<<"-"<<j<<" "<<edit[i][j]<<endl ;
    }
    return edit[al][bl] ;

}

int main (){
    char a[] = "fxpimu" ;
    char b[] = "xwrs" ;
    //char d='d',e='d';
    //cout<<str_equal(d,e);
    cout<<Levenshtein(a,b,6,4);
    return 0;
}

相關推薦

編輯距離Levenshtein Distance演算法

題目連結:https://cn.vjudge.net/problem/51Nod-1183  Levenshtein距離是一種計算兩個字串間的差異程度的字串度量(string metric)。我們可以認為Levenshtein距離就是從一個字串修改到另一個字串時,其中編輯單個字元(比如修改、插入

編輯距離(Edit Distance)【DP】

概念 編輯距離(最短編輯距離,Edit Distance)又稱Levenshtein Distance,“是指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數。許可的編輯操作包括將一個

編輯距離問題 Levenshtein Distance

個人覺得只要你能明白edit陣列的含義就可以理解狀態轉移方程了。/* 可以用來表示字串的相似度? */ #include <bits/stdc++.h> using namespace s

編輯距離算法實現

編輯 length 一個 font then java實現 ron init system 一,算法介紹 在CS124課程的第一周提到 求解兩個字符串相似度的算法---Minimum Edit Distance(最短編輯距離)算法。該算法在NLP(自然語言處理)中也會用到。

字串相似度演算法(編輯距離演算法 Levenshtein Distance

在搞驗證碼識別的時候需要比較字元程式碼的相似度用到“編輯距離演算法”,關於原理和C#實現做個記錄。 據百度百科介紹: 編輯距離,又稱Levenshtein距離(也叫做Edit Distance),是指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數,如果它們的距離越大,說明它們越是不同。許可

[Swift]LeetCode243.單詞距離 $ Shortest Word Distance

Given a list of words and two words word1 and word2, return the shortest distance between these two words in the list. For example,Assume t

編輯距離演算法(字串比較)

一、編輯距離 1、從字串a變為字串b所需要的元操作有3種: 增加一個字元刪除一個字元變化一個字元2、編輯距離:從字串a變為b所需要的最少操作步驟。 二、最短編輯距離(動態規劃) 首先定義一個函式——s

編輯距離 | Minimum Edit Distance

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

動態規劃---編輯距離

描述: 設A和B是2個字串。要用最少的字元操作將字串A轉換為字串B。這裡所說的字元操作包括: (1)刪除一個字元; (2)插入一個字元; (3)將一個字元改為另一個字元。 將字串A變換為字串B所用的

兩個字串之間的編輯距離

1.演算法原理編輯距離(Edit Distance)是指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數,編輯操作包括增、刪、改操作。例如將kitten一字轉成sitting:sitten (k→s)sittin (e→i)sitting (→g),最短編輯距離為3.跟“

(5千字)由淺入深講解動態規劃(JS版)-鋼條切割,大公共子序列,編輯距離

斐波拉契數列 首先我們來看看斐波拉契數列,這是一個大家都很熟悉的數列: // f = [1, 1, 2, 3, 5, 8] f(1) = 1; f(2) = 1; f(n) = f(n-1) + f(n -2); // n > 2 有了上面的公式,我們很容易寫出計算f(n)的遞迴程式碼: functio

編輯距離演算法詳解Levenshtein Distance演算法——動態規劃問題

目錄 背景: 求編輯距離演算法: 圖解過程: C++程式碼如下: 總結: 背景: 我們在使用詞典app時,有沒有發現即使輸錯幾個字母,app依然能給我們推薦出想要的單詞,非常智慧。它是怎麼找出我們想要的單詞的呢?這裡就需要BK樹來解決這個問題了。在使用BK樹

編輯距離演算法詳解Levenshtein Distance演算法

轉自: 編輯距離,又稱Levenshtein距離(也叫做Edit Distance),是指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數。許可的編輯操作包括將一個字元替換成另一個字元,插入一個字元,刪除一個字元。   演算法基本原理:假設我們可以使用d[ i ,

Levenshtein distance編輯距離演算法實現

Levenshtein distance,中文名為最小編輯距離,其目的是找出兩個字串之間需要改動多少個字元後變成一致。該演算法使用了動態規劃的演算法策略,該問題具備最優子結構,最小編輯距離包含子最小編輯距離,有下列的公式。 其中d[i-1,j]+1代表字串s2插入一個字母

245. Shortest Word Distance III 單詞可以重復的單詞距離

距離 list NPU ring example 一次 技術分享 open 處理 [抄題]: Given a list of words and two words word1 and word2, return the shortest distance between

[python]My Unique JsonDiff演算法——如何計算2個json串之間的差距並Diff出來(一)編輯距離Levenshtein)演算法

    啊啊,年底忙著簽證什麼的,好久沒寫日誌啦。。。。新年到來,整點乾貨出來給大家~~順便為自己考試和申請學校攢點人品~~     之前實習的時候,因為實習公司的業務需求,需要一個比對json字串差異的演算法,然而我在網上查了很久的資料,發現竟然沒有現成

[LeetCode] Shortest Word Distance 單詞距離

Given a list of words and two words word1 and word2, return the shortest distance between these two words in the list. For example,Assume that words = [

[LeetCode] Shortest Word Distance II 單詞距離之二

This is a follow up of Shortest Word Distance. The only difference is now you are given the list of words and your method will be called repeatedly many

[LeetCode] Shortest Word Distance III 單詞距離之三

This is a follow up of Shortest Word Distance. The only difference is now word1 could be the same as word2. Given a list of words and two words word1 an

動態規劃例項(八)編輯距離

    問題:給定一個長度為m和n的兩個字串,設有以下幾種操作:替換(R),插入(I)和刪除(D)且都是相同的操作。尋找到轉換一個字串插入到另一個需要修改的最小(操作)數量。     關於編輯距離    編輯距離(Edit Distance),又稱Levenshtein距離