實踐題目
7-3 編輯距離問題 (30 分)
設a和b是2個字串。要用最少的字元操作將字串a轉換為字串b。這裡所說的字元操作包括 (1)刪除乙個字元; (2)插入乙個字元; (3)將乙個字元改為另乙個字元。 將字串a變換為字串b所用的最少字元運算元稱為字串a到 b的編輯距離,記為d(a,b)。 對於給定的字串a和字串b,計算其編輯距離 d(a,b)。
第一行是字串a,檔案的第二行是字串b。
輸出編輯距離d(a,b)
演算法描述:
如果a[i]==b[j]那麼dp[i][j] 的答案就是 dp[i-1][j-1]
如果a[i]!=b[j] 那麼dp[i][j] 的答案將會是,
刪除a[i]: 1+dp[i-1][j], 刪除b[j]: 1+dp[i][j] , 修改a[i] 使 a[i]==b[j]: 1+dp[i-1][j-1]
這三個操作中答案最小的那個
#include#includeview codeusing
namespace
std;
char a[2100],b[2100
];int dp[2100][2100
];int
main()
}cout
<
return0;
}
演算法時間及空間複雜度分析:
時間複雜度:填表法,時間複雜度是o(m*n)
空間複雜度:沒有額外開闢空間,所以空間複雜度是o(1)
心得體會:動態規劃最重要的還是要寫出遞迴方程,填表法需要反覆借用狀態轉移方程來求未知量
演算法第三章上機實驗報告
1.問題描述 給定乙個由 n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形 的頂至底的一條路徑 每一步可沿左斜線向下或右斜線向下 使該路徑經過的數字總和最大。2.演算法描述 include iostream include cmath usingnamespacestd intm...
演算法第三章上機報告
在乙個地圖上有n個地窖 n 200 每個地窖中埋有一定數量的地雷。同時,給出地窖之間的連線路徑,並規定路徑都是單向的,且保證都是小序號地窖指向大序號地窖,也不存在可以從乙個地窖出發經過若干地窖後又回到原來地窖的路徑。某人可以從任意一處開始挖地雷,然後沿著指出的連線往下挖 僅能選擇一條路徑 當無連線時...
演算法第三章上機實踐報告
一 實踐題目 7 2 最大子段和 給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整數均為負數時,定義子段和為0。要求演算法的時間複雜度為o n 輸入格式 輸入有兩行 第一行是n值 1 n 10000 第二行是n個整...