演算法 動態規劃

2022-08-21 10:18:11 字數 928 閱讀 2867

給兩個單詞word1和word2

求將word1變成word2的最少操作

操作:insert:插入乙個字元

delete:刪除乙個字元

replace:替換乙個字元

第一次是在leetcode動態規劃(leetcode72)看到的,後面做某公司筆試真題的時候又見到了,自己想的太簡單了,記錄一下解法。

動態規劃三步:

1.定義陣列含義

首先定義word1長度是i,word2長度j,dp[i][j]代表轉換的最少運算元

我們要做的是逐一比較word1[1~i]和word2[1~j]

相同 就同時移步 dp[i][j]==dp[i-1][j-1]

不同,有三種操作

替換:直接在word1【i】中替換乙個與word2【j】對應位置相同的字元 ,兩邊需要都移位,運算元+1

dp[i][j]==dp[i-1][j-1] + 1

刪除:把字元word[i]刪除,用i-1位再繼續比較,則 dp[i][j]==dp[i-1][j] + 1

插入:在word1[i]後插入乙個與word2[j]相同的字元,即為 dp[i][j]==dp[i][j-1] + 1

在我們逐個比較的過程中,需要從這三種操作中選一種,讓最後dp[i][j]最小,可以得到乙個關係:

dp[i][j] = min + 1

找初始值

當 i 或 j 為0時,關係式就不在成立,不能進行移位。但是計算也很簡單,其中乙個為0時,另乙個的長度就是最少的運算元。

public int func(string word1,string word2)

for(int i = 1; i <= len1; i++)

for(int i = 1;i<=len1;i++)else}}

return dp[len1][len2];

}

演算法 動態規劃

動態規劃 把多階段過程轉化為一系列單階段問題,利用各階段之間的關係,逐個求解 演算法例子 1.鋼條切割 serling 公司購買長鋼條,將其切割為短鋼條,切割工序假設沒有成本支出,公司管理層希望確定最佳的切割方案。假設serling公司 一段長度為i英吋的鋼條的 為pi。鋼條的長度為整英吋,下表給出...

演算法 動態規劃

1 問題具有最優子結構性質。如果問題的最優解所包含的子問題的解也是最優的,我們就稱該問題具有最優子結構性質。比如說在揹包問題中,最高總價值 max 選擇不放該物品時達到的總價值,決定放該物品時揹包剩餘容量能達到的最大價值 該物品價值 顯然,最高總價值的解一定包含 選擇不放該物品時達到的總價值 和 決...

演算法 動態規劃

動態規劃的定義 動態規劃是運籌學的乙個分支,是求解決策過程的最優化的數學方法。20世紀50年代初美國數學家r.e.bellman等人在研究多階段決策過程的優化問題時,提出了著名的最優化原理,把多階段過程轉化為一系列單階段問題,利用各階段之間的關係,逐個求解,創立了解決這類過程優化問題的新方法 動態規...