1. 程式人生 > >字串編輯距離(Levenshtein距離)演算法

字串編輯距離(Levenshtein距離)演算法

基本介紹

  Levenshtein距離是一種計算兩個字串間的差異程度的字串度量(string metric)。我們可以認為Levenshtein距離就是從一個字串修改到另一個字串時,其中編輯單個字元(比如修改、插入、刪除)所需要的最少次數。俄羅斯科學家Vladimir Levenshtein於1965年提出了這一概念。

簡單例子

  從字串“kitten”修改為字串“sitting”只需3次單字元編輯操作,如下:

    • sitten ( k -> s )
    • sittin ( e -> i )
    • sitting ( _ -> g )

  因此“kitten”和“sitting”的Levenshtein距離為3。

實現思想

  如何程式設計實現這一演算法呢?許多人試圖用矩陣來解釋,但實際上矩陣是最終視覺化的工具,配合理解“為什麼”比較方便,但從矩陣卻比較難想到“怎麼做”。

  我們試圖找到“從字串AAA修改到字串BBB”這一問題的子解結構。當然反過來說“從字串BBB修改到字串AAA”和它是同一個問題,因為從AAA中刪掉一個字元來匹配BBB,就相當於在BBB中插入一個字元來匹配AAA,這兩個操作是可以互相轉化的。

  假設字元序列A[1i]A[1\ldots i]A[1i]B[1j]B[1\ldots j]B[1j]分別是字串AAABBB的前iiijjj個字元構成的子串,我們得到一個子問題是“從字串A

[1i]A[1\ldots i]A[1i]修改到字串B[1j]B[1\ldots j]B[1j]”:A:B:A[1]B[1]A[2]B[2]A[i2]B[j2]A[i1]B[j1]A[i]B[j]\left[\begin{matrix}\begin{aligned}&A:&&A[1]&&A[2]&&\cdots&&A[i-2]&&A[i-1]&&A[i]\\\\&B:&&B[1]&&B[2]&&\cdots&&B[j-2]&&B[j-1]&&B[j]\end{aligned}\end{matrix}\right]

相關推薦

字串編輯距離Levenshtein距離演算法

基本介紹  Levenshtein距離是一種計算兩個字串間的差異程度的字串度量(string metric)。我們可以認為Levenshtein距離就是從一個字串修改到另一個字串時,其中編輯單個字元(比如修改、插入、刪除)所需要的最少次數。俄羅斯科學家Vladimir Lev

【動態規劃】字串編輯距離Levenshtein距離演算法

基本介紹 Levenshtein距離是一種計算兩個字串間的差異程度的字串度量(string metric)。我們可以認為Levenshtein距離就是從一個字串修改到另一個字串時,其中編輯單個字元(比如修改、插入、刪除)所需要的最少次數。俄羅斯科學家Vladi

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

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

資料對齊-編輯距離演算法詳解Levenshtein distance

目錄 一:簡介 二:演算法定義 1:定義 2:a small case 3:演算法的上下界限 三:應用場景 1:資料對齊 2:拼寫糾錯 四:其他的編輯距離演算法 五:演算

Leetcode 編輯距離動態規劃

給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 。 你可以對一個單詞進行如下三種操作: 插入一個字元 刪除一個字元 替換一個字元 示例 1: 輸入: word1 = "horse", word2 = "ros"

編輯距離動態規劃

public class 編輯距離 { private static char str1[] = "Male".toCharArray(); private static char str2[] = "Female".toCharArray(); private st

最短編輯距離Edit Distance【DP】

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

【TOJ 1072】編輯距離動態規劃

for 測試 一次 刪除 插入字符 替換 ring bit class 描述 假設字符串的基本操作僅為:刪除一個字符、插入一個字符和將一個字符修改成另一個字符這三種操作。 我們把進行了一次上述三種操作的任意一種操作稱為進行了一步字符基本操作。 下面我們定義兩個字符串的

習題2.7 彈球距離15 分浙大版《數據結構第2版》題目集

double logs lang log scanf col while printf otto 設有一個球從高度為h米的地方落下,碰到地面後又彈到高度為原來p倍的位置,然後又落下,再彈起,再落下…。請編寫函數求初始高度為h的球下落後到基本停下來(高度

javaleetcode461 漢明距離 Hamming Distance

題目描述: 兩個整數之間的漢明距離指的是這兩個數字對應二進位制位不同的位置的數目。(漢明距離是使用在資料傳輸差錯控制編碼裡面的,漢明距離是一個概念,它表示兩個(相同長度)字對應位不同的數量,我們以d(x,y)表示兩個字x,y之間的漢明距離。對兩個字串進行異或運算,並統計結果為1的個數,那麼這

461.漢明距離c++實現

問題描述: 兩個整數之間的漢明距離指的是這兩個數字對應二進位制位不同的位置的數目。 給出兩個整數 x 和 y,計算它們之間的漢明距離。 注意:0 ≤ x, y < 231. 示例: 輸入: x = 1, y = 4 輸出: 2

演算法3-2:行編輯程式 c語言

: 演算法3-2:行編輯程式 時間限制:1 Seconds 記憶體限制:32 Mbyte 總提交:65 正確:9 作者:外部匯入 [提交] [統計] [提問] 題目描述 一個簡單的行編輯程式的功能是:接收使用者從終端輸入的程式或資料,並存入使用者的資料區。由於使用者在終端上進

曼哈頓距離Manhattan Distance 詳解

概念 曼哈頓距離——兩點在南北方向上的距離加上在東西方向上的距離,即d(i,j)=|xi-xj|+|yi-yj|。對於一個具有正南正北、正東正西方向規則佈局的城鎮街道,從一點到達另一點的距離正是在南北方向上旅行的距離加上在東西方向上旅行的距離,因此,曼哈頓距離又稱為計程車距離。 ——引用自百度&nb

leetcode461 漢明距離 Hamming Distance

題目描述: 兩個整數之間的漢明距離指的是這兩個數字對應二進位制位不同的位置的數目。(漢明距離是使用在資料傳輸差錯控制編碼裡面的,漢明距離是一個概念,它表示兩個(相同長度)字對應位不同的數量,我們以d(x,y)表示兩個字x,y之間的漢明距離。對兩個字串進行異或運算,並統計結果

演算法競賽入門經典(第二版)-劉汝佳-第三章 陣列與字串 例題+習題17/18

說明 本文是我對第三章題目的練習總結,建議配合紫書——《演算法競賽入門經典(第2版)》閱讀本文。 另外為了方便做題,我在VOJ上開了一個contest,歡迎一起在上面做:第三章contest 如果想直接看某道題,請點開目錄後點開相應的題目!!! 例題

scrollTop總為零原因;如何查看滾動條的位置或者說滾動條的滾動距離待完善

如何 chrom col onscroll tail 使用 clas set 高度 1、document.body.scrollTop的值總為零的原因有一個功能需要判斷下拉的距離,設置頭部固定導航欄的顏色。 代碼如下: <!DOCTYPE html><ht

scrollTop總為零原因;如何檢視滾動條的位置或者說滾動條的滾動距離待完善

1、document.body.scrollTop的值總為零的原因有一個功能需要判斷下拉的距離,設定頭部固定導航欄的顏色。 程式碼如下: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8">

【LOJ#6073】距離主席樹

【LOJ#6073】距離(主席樹) 題面 LOJ 題解 兩點間的距離是\(dep[x]+dep[y]-2dep[LCA]\)。 那麼題目要求的東西拆開維護,唯一不好做的就是\(2dep[LCA]\)。 而現在要求的是某個單點與一個點集的所有\(LCA\)的深度和。 那麼把點集中每一個點到根的路徑全部標

Python的二進位制數位運算,計算漢明距離Hamming Distance為例

Python的二進位制數操作,計算漢明距離(Hamming Distance)為例 最近發現了LeetCode這個好網站,做了幾道題,今後刷LeetCode學習到的新知識我都儘量抽時間記錄下來,同時分享給大家。 今天就從LC上一道題說起: Giv

opencv:L1距離,L2距離,顏色失真color distortion,漢明距離hamming distance,LUT

#pragma once #include <opencv2/core/types_c.h> //! computes the L1 distance between two integer values template<typename T>