日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

算法题解:最小编辑距离(动态规划算法)

發布時間:2025/3/19 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法题解:最小编辑距离(动态规划算法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目分析

題目鏈接:https://leetcode.com/problems...
對于長度為x的字符串s1和長度為y的字符串s2,從s1改變成s2最少要經過多少次“增加”、“刪除”或“替換”?

為了使用動態規劃算法,要先將父問題分解成子問題(父問題和子問題是同一種問題,只不過分解得到的子問題規模更小)。
那么現在就需要我們找出父問題和子問題之間的轉移關系。推導父子問題之間的轉移關系有2中思路:

  • 要解決父問題,需要先解決哪些子問題

    • 要求解兩個字符串之間的最小編輯距離,需要用到哪些更小的字符串之間的編輯距離?
  • 假設已經知道一些子問題的答案,能計算出哪些同一類型、規模更大的父問題

    • 如果已經知道某一對字符串之間的編輯距離(已經知道一些子問題),能推導出哪些字符串之間的最小編輯距離(這些子問題能求解出哪些父問題

在這個問題中,使用第一種思路更簡單。
假設要求s3與s4兩個字符串之間的最小編輯距離,有下面兩種情況:

  • 如果s3與s4的結尾字符相同,那么答案等于s3與s4都去掉結尾字符以后的最小編輯距離(子問題)
  • 如果s3與s4的結尾字符不同,那么先不管前面的那些字符,如何編輯s3使得兩個字符串的結尾字符相同呢?測試幾個例子能知道,結尾字符最終相同只能有以下3種原因

    • 向s3后面拼接s4的結尾字符。此時,原始s3與s4的最小編輯距離=1+拼接以后的最小編輯距離
    • 刪除s3的結尾字符(可能刪除以后結尾字符還是不同,不過沒關系,這是子問題要處理的事情)。此時,原始s3與s4的最小編輯距離=1+刪除以后的最小編輯距離
    • 將s3的結尾字符替換成了s4的結尾字符。此時,原始s3與s4的最小編輯距離=1+替換以后的最小編輯距離

除了以上三種手段以外,不管你如何對s3的前面字符如何增加、刪除、替換,都不能讓結尾字符相同。

現在將上面結論換成代碼表述。假設ed[i][j]表示 word1[0]~word1[i-1]與word2[0]~word2[j-1]之間的最小編輯距離

if (word1[i - 1] == word2[j - 1]) ed[i][j] = ed[i - 1][j - 1]; else ed[i][j] = min(min(ed[i][j - 1] + 1, ed[i - 1][j] + 1), ed[i - 1][j - 1] + 1); // 將3種方法都嘗試,取最小的結果

現在有了轉移關系,我們只要先計算子問題的結果(較短子串之間的編輯距離)并存儲起來,然后用它計算出父問題的結果(較長子串之間的編輯距離),最后就能算出兩個完整字符串之間的編輯距離。

代碼實現

class Solution {public:int minDistance(string word1, string word2){const int size1 = word1.size(),size2 = word2.size();if (size1 == 0)return size2;if (size2 == 0)return size1;// ed[i][j]表示 word1[0]~word1[i-1]與word2[0]~word2[j-1]之間的最小編輯距離vector<vector<int>> ed(size1 + 1, vector<int>(size2 + 1, 0));// 初始化任意字符與空字符之間的編輯距離for (int i = 0; i <= size1; i++){ed[i][0] = i;}for (int i = 0; i <= size2; i++){ed[0][i] = i;}for (int i = 1; i <= size1; i++){for (int j = 1; j <= size2; j++){if (word1[i - 1] == word2[j - 1])ed[i][j] = ed[i - 1][j - 1];else// 將3種編輯結尾的方法都嘗試,取最小的結果ed[i][j] = min(min(ed[i][j - 1] + 1, ed[i - 1][j] + 1), ed[i - 1][j - 1] + 1);}}return ed[size1][size2];} };

使用了2層嵌套循環,對每一種word1和word2的前綴的組合都求出了編輯距離,因此時間復雜度是O(n^2)。

在這里,數組ed具有更一般的含義:它是動態規劃算法的記憶存儲,存儲了已經計算出的子問題的答案。更嚴格地說,其實只需要存儲將來可能被父問題用到的計算結果。

總結

以上是生活随笔為你收集整理的算法题解:最小编辑距离(动态规划算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩美女三级 | 国产综合久久 | 欧美一级在线视频 | jzzijzzij日本成熟少妇 | 欧美日韩亚洲在线观看 | 国产黄色美女视频 | 最近中文在线观看 | 久久久久久av无码免费网站 | 又黄又爽的视频 | 性感少妇在线观看 | 综合色在线| 日本精品一区二区三区四区的功能 | 91吃瓜今日吃瓜入口 | 在线观看wwww | 久久天天操 | 天天看片天天干 | 91爱爱爱| 中文字幕av高清 | 男女性生活视频网站 | 一本色道久久加勒比精品 | 中文字幕一区二区在线播放 | 快射视频网站 | 国产视频资源 | 欧美乱妇狂野欧美在线视频 | 午夜欧美精品久久久久久久 | 欧美 日韩 国产 一区 | 99激情| 国产精品情侣呻吟对白视频 | 国产精品久久久久毛片软件 | 国产成人三级在线观看视频 | 特极毛片 | 国产欧美在线观看 | 蜜桃网站| 亚洲精品九九 | 人人人干 | 国产成人在线网站 | 国产亚洲不卡 | 九九热精品视频在线 | 欧美一区二区三区激情啪啪 | 日韩精品国产一区二区 | 日韩二三区 | 国产一区二区在线播放 | 成人欧美一级特黄 | 国产乱子伦精品 | 欧美18一20男同69gay | 性做久久久久久久久 | 综合色吧 | 国产农村妇女aaaaa视频 | h网站在线播放 | 女同性做受全过程动图 | 性色tv | 国产精品久久久久无码av色戒 | 欧美日韩一区二区三区四区五区 | 日韩精品免费 | 国产又黄又粗又猛又爽的视频 | 三级网站免费看 | 肉色丝袜小早川怜子av | 成人精品一区二区三区 | 男生和女生靠逼视频 | 国产美女激情 | 国产成人免费在线 | 欧美精品片| 久久久久99精品成人片 | 亚洲50p| 久久久999| 精品国产乱码一区二区 | а√在线中文网新版地址在线 | 久热免费在线 | 3d动漫精品啪啪一区二区下载 | 久久久久久久久久影院 | 九九视频在线 | 日日爱夜夜爱 | 成人免费大片黄在线播放 | 全黄性性激高免费视频 | 亚洲精品一区二区在线观看 | 中文字幕精品一区二区三区视频 | 日韩精品中文字幕在线观看 | 99热1| 丁香激情五月 | 免费成人美女在线观看 | 欧美黑吊大战白妞 | 国产aa毛片 | 亚洲天堂网络 | 美妇湿透娇羞紧窄迎合 | 丁香六月综合激情 | 欧美一区三区三区高中清蜜桃 | 荫蒂被男人添免费视频 | 免费网站www在线观看 | 综合在线亚洲 | av一二三区 | www.四虎.| 朝鲜一级黄色片 | 亚洲色图27p | 国产区精品视频 | 色综合欧美 | 国产欧美精品一区二区色综合朱莉 | 亚洲精品亚洲 | 国模一区二区三区 | 久热精品在线观看 |