日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

最小编辑代价

發(fā)布時(shí)間:2025/4/5 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最小编辑代价 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目

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

舉例

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

基本思路

  如果str1的長度為N,str2的長度為M,生成(N+1)×(M+1)的矩陣dp,為什么N+1,M+1,因?yàn)槲覀冃枰谧址拈_頭添加一個(gè)空字符的特殊情況,dp[i][j]的值代表str1[0…i-1]編輯成str2[0…j-1]的最小代價(jià)。dp的計(jì)算如下:

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

矩陣的第一列表示str1[0…i-1]編輯成空字符所需要的最小代價(jià),當(dāng)然只需要?jiǎng)h除操作即可,所以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]后就不需要進(jìn)行替換了。
?

"""經(jīng)典動(dòng)態(tài)規(guī)劃,時(shí)間復(fù)雜度O(N),空間復(fù)雜度為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]

?

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。