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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

最小编辑代价

發布時間:2025/4/5 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最小编辑代价 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

  給定兩個字符str1和str2,再給定三個整數ic,dc,rc,分別代表插入,刪除和替換一個字符的代價,返回將str1編輯成str2的最小代價。

舉例

  str1 = “abc”,str2 = “adc”,ic = 5,dc = 3,rc = 100。?
  從str1編輯到str2,先刪除’b’,然后插入’d’是代價最小的,所以返回8。

基本思路

  如果str1的長度為N,str2的長度為M,生成(N+1)×(M+1)的矩陣dp,為什么N+1,M+1,因為我們需要在字符串的開頭添加一個空字符的特殊情況,dp[i][j]的值代表str1[0…i-1]編輯成str2[0…j-1]的最小代價。dp的計算如下:

矩陣的第一行表示空字符編輯成str2[0…j-1]所需要的最小代價,當然只需要插入操作即可,所以dp[0][j] = ic * j。

矩陣的第一列表示str1[0…i-1]編輯成空字符所需要的最小代價,當然只需要刪除操作即可,所以dp[i][0] = dc * i。

矩陣的其他位置來自以下的三種情況:dp[i-1][j]+dc,dp[i][j-1]+ic,(dp[i-1][j-1] or dp[i-1][j-1]+rc)


1)dp[i-1][j] + dc,表示先刪除str1[i-1],然后將str1[0…i-2]編輯成str2[0…j-1]

2)dp[i][j-1] + ic,表示將str1[i-1]編輯成str2[0…j-2],然后再插入str2[j-1]

3)dp[i-1][j-1] or dp[i-1][j-1]+rc,表示如果str1[i-1] != str2[j-1],則先將str1[0…i-2]編輯成str2[0…j-2]再將str1[i-1]替換成str2[j-1],如果str1[i-1] == str2[j-1],則將str1[0…i-2]編輯成str2[0…j-2]后就不需要進行替換了。
?

"""經典動態規劃,時間復雜度O(N),空間復雜度為O(N)"""def minCost1(str1,str2,dc,tc,ic):if str1 == None or str2 == None:return 0row = len(str1) + 1col = len(str2) + 1dp = [[0 for i in range(col)] for j in range(row)]for i in range(row):dp[i][0] = i*dcfor j in range(col):dp[0][j] = i*icfor i in range(row):for j in range(col):if str1[i-1]== str2[j-1]:dp[i][j] = dp[i-1][j-1]else:dp[i][j] = dp[i-1][j-1] + rcdp[i][j] = min(dp[i][j],dp[i-1][j]+dc)dp[i][j] = min(dp[i][j],dp[i][j-1]+ic)return dp[-1][-1]

?

總結

以上是生活随笔為你收集整理的最小编辑代价的全部內容,希望文章能夠幫你解決所遇到的問題。

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