最長公共子串,編輯距離,最長公共子序列

前言

最長公共串是編輯距離與最長公共子序列的基礎,而編輯距離與最長公共子序列應用之處非常廣泛。

在單詞的和詞彙的校驗是否正確中,會使用到編輯距離;最長公共子序列算法在文本的diff算法,git和svn中比較代碼修改前後的差異,兩個文本的相似度計算使用最長公共子序列計算將更加準確,能夠保留更多的信息(餘弦夾角只能根據詞頻計算)。在多數的算法解釋中,都僅僅是提供公式和代碼;他們的代碼和公式很容易記住。學習是一個理解的過程,不然只會拿着它解決特定問題,而不能進行擴展。

最長公共串

字符串strA = "acasdef"和字符串strB = "aasdefd";容易得出最長公共串的asdef。
最長公共串是計算兩個字符串中連續的最長的相同的 字符串。

行和列相互比較,如果不相等使用0 進行填充,如果相等 取得 左上方的值加1 填充此位置;
根據如下圖的矩陣排列,第二行與第一列的a從第一列開始,依次與第二列比較,直到最後一列。這種排列過程形如,a依次與字符串acasdef進行比較。同理第一行第二列的a,依次從第一行開始,然後第二行第二列a,就相當於a與字符串aasdefd進行比較。
在這裏插入圖片描述
查看一下左上方是什麼意思;比如:下圖中數字2的左邊就是橫軸字符退一格,由原來的acas變成aca數字2的上方就是縱軸字符退一個,由原來的aas變成aa 。那麼就容易得出了,左上方就是當前橫軸strA縱軸strB字符串的前一個字符。
在這裏插入圖片描述
可能不好理解,我們再來整一個圖;看綠色背景的對角線的字符,其實就是橫軸的ac縱軸的as;藍色背景的其實就是 sdefaasd,那麼橘黃色背景也很容易得出 defefd 了;兩個灰色背景的對角分別是 defdacas比較,defdasde

那麼我們得出結論,字符串strA = "acasdef"和字符串strB = "aasdefd",可以出現任何長度的比較。而且先前的 比較的值 已經保存在對應的位置中,那麼下次再進行別的位置比較時,若需要用到之前的值,拿來使用即可;這種方法美其名曰動態規劃

在這裏插入圖片描述

編輯距離
最長公共子序列
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章