程式設計之美 3 3 計算字串的相似度

2021-09-08 15:40:15 字數 670 閱讀 5799

1. 簡述

使用兩個字串之間的編輯距離計算它們的相似度,相似度=1/(編輯距離+1)。兩個字串的編輯距離:指通過下面三種操作可以將兩個字串變為相同的字串需要的次數。1) 修改乙個字元 2) 增加乙個字元 3) 刪除乙個字元。

對於"abcdefg"和"abcdef"兩個字串來說,我們認為可以通過增加/減少乙個"g"的方式來達到目的,將兩個字串變成相同字串的最小步數為1,因此編輯距離為1,相似度=1/(1+1)=0.5。

給定兩個字元,程式設計實現計算它們的相似度。

2. 思路

這道題我暫時沒什麼新的想法,基本上是沿用書上的方法。見過乙個**是計算字典樹中字串的相似度的,回來有機會把那個看看。

假設兩個字串為a和b,當前匹配a[i]與b[j]。

如果a[i]==b[j],當前編輯距離+=a[i+1,len_a-1]與b[j+1,len_b-1]編輯距離。

如果a[i]!=b[j],當前編輯距離+=min  ,

,  }  + 1。   

採用備忘錄方法,使用int record[len_a][len_b]陣列將計算過的編輯距離儲存,record[i][j],表示a[i,len_a-1]與b[j,len_b-1]的編輯距離。

最後相似度=1.0 / (編輯距離+1)

3. 參考

程式設計之美,3.3節,計算字串的相似度

程式設計之美3 3 計算字串的相似度

問題 1.計算兩個字串的最長公共子串行 lcs 且公共子串行在字串中不需要是連續的。2.計算兩個字串的距離,完全相同的字串距離為0,可以通過修改乙個字元 增加乙個字元或刪除乙個字元三種方式來使兩個字串相同,但這些方式會使得距離加1。1.解法 這兩個問題的解法基本相同,都是二維的動態規劃,都考慮字串的...

程式設計之美 計算字串的相似度

把兩個字串變成相同的基本操作定義如下 1.修改乙個字元 如把 a 變成 b 2.增加乙個字元 如 abed 變成 abedd 3.刪除乙個字元 如 jackbllog 變成 jackblog 針對於 jackbllog到jackblog 只需要刪除乙個或增加乙個 l 就可以把兩個字串變為相同。把這種...

程式設計之美讀書筆記 3 3 計算字串的相似度

3.3 計算字串的相似度 和計算兩字串的最長公共子串行相似。設ai為字串a a1a2a3 am 的前i個字元 即為a1,a2,a3 ai 設bj為字串b b1b2b3 bn 的前j個字元 即為b1,b2,b3 bj 設l i j 為使兩個字串和ai 和bj相等的最小操作次數。當ai等於bj 時 顯然...