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

2021-05-22 14:00:28 字數 806 閱讀 8344

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

時 顯然l(i, j)=l(i-1, j-1)

當ai不等於bj時

若將它們修改為相等,則對兩個字串至少還要操作l(i-1, j-1)次

若刪除ai

或在bj

後新增ai

,則對兩個字串至少還要操作l(i-1, j)次

若刪除bj

或在ai

後新增bj

,則對兩個字串至少還要操作l(i, j-1)次

此時l(i, j)=min( l(i-1, j-1), l(i-1, j), l(i, j-1) ) + 1

顯然,l(i, 0)=i,l(0, j)=j, 再利用上述的遞推公式,可以直接計算出l(i, j)值。

為了保持與書中**一致,下面的函式引數型別是string,而不是char*。

由於只要求計算兩字串的距離,計算時,只用到兩列資料,因而可以對**進一步優化,節省空間。

上面的**還可進一步優化,比如通過指標而不是陣列名來訪問記憶體。如果記憶體足夠大,可以多申請空間,每次迴圈,通過修改儲存的資料起始位置,避免記憶體複製。

《程式設計之美》讀書筆記

程式設計之美 讀書筆記 一 中國象棋將帥問題 程式設計之美 讀書筆記 二 求二進位制數中1的個數 擴充套件問題 程式設計之美 讀書筆記 三 一摞烙餅的排序問題 程式設計之美 讀書筆記 四 買書折扣問題的貪心解法 程式設計之美 讀書筆記 五 飲料 問題 程式設計之美 讀書筆記 六 連連看遊戲設計 程式...

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

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

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

1.簡述 使用兩個字串之間的編輯距離計算它們的相似度,相似度 1 編輯距離 1 兩個字串的編輯距離 指通過下面三種操作可以將兩個字串變為相同的字串需要的次數。1 修改乙個字元 2 增加乙個字元 3 刪除乙個字元。對於 abcdefg 和 abcdef 兩個字串來說,我們認為可以通過增加 減少乙個 g...