比如我們要將what
轉換成where
,可能是將 a -> e,接著 t -> r ,變為wher
,最後新增 e,完成。因為每一步都可以插入、刪除或替換,那麼如何才能在最終得到乙個最小的代價,這是就會用到動態規劃來求解。
假設我們有長度分別為i、j
的兩個字串,設編輯距離為edit(i,j)
。接著我們看下,如果它們最後的字元相等,則編輯距離其實等於edit(i-1,j-1)
。而如果最後的字元不相等,那麼我們可以通過插入或替換來使其相等,但是不同的操作對應的代價不相同,如果插入則為edit(i,j-1)+1
或eidit(i-1,j)+1
,替換則為edit(i-1,j-1)+1
。
用以下動態方程來表示:
比較兩個字串的相似度
最近在做演算法作業,需要比較兩個字串的相似度,並且返回相同的元素所佔的百分比。如果讓我自己做的話,思路是把兩個字串分別轉化為列表,然後在列表中解決掉。new i for i,j in zip a,b if i j ratio 2.0 len new len a len b seq difflib.s...
求兩個字串的相似度(或距離)
兩個字串距離和相似度的定義 通過修改 增加和刪除操作,使兩個字串變的相等,所做的操作次數為兩個字串的距離,距離加1的倒數為相似度。例如 a abeg b cdeg 通過更改a中的ab cd使兩個字串相等,兩個操作,距離為2。求距離的 如下 int caldistance char a,char b ...
兩個字串匹配度演算法
在工作過程中,需要用到兩個字串匹配度演算法,網上參考一些資料,寫了乙個匹配度演算法類,專案中用到了而且效果很不錯,今天給大家分享。可以直接複製到你的專案中,就乙個呼叫函式,非常簡單。public class levenshteindistance endregion region 建構函式 publ...