該法是動態規劃的變形,或者可以理解為動態規劃的優化,優化在增強理解和書寫簡單方面。
public static int recurmatrixchain(int i,int j)
//遞迴求解問題並先查表
public static int lookupchain(int i,int j) {
if(m[i][j]>0) return m[i][j];//先查表,如果對應值不為0說明求解過,直接拿來用
if(i==j) return 0;
int u=lookupchain(i+1,j)+p[i-1]*p[i]*p[j];
s[i][j]=i;
for(int k=i+1;k備忘錄方法的時間複雜度和動態規劃的一樣,t(n)=o(n^3)上界。
動態規劃和備忘錄方法時間成本都一樣,那怎麼選用?
一般情況下,若所有子問題需要乙個不拉的至少求解一遍時,用動態規劃,它遍歷整個矩陣空間,沒有多餘的計算。
若子問題存在有不需要求解的部分(外加條件),可用備忘錄方法,從它的遞迴可以看出,通過判斷只求需要解的問題。
[1] 演算法設計與分析(第2版) 王曉東
備忘錄方法
動態規劃演算法的乙個變形是備忘錄方法。備忘錄方法也用乙個 來儲存已解決的子問題的答案,在下次需要解決此問題時,只要簡單地檢視該子問題的解答,而不必重新計算。與動態規劃演算法不同的是,備忘錄方法的遞迴方式是自頂向下的,而動態規劃演算法則是自底向上遞迴的。因此,備忘錄方法的控制結構與直接遞迴方法的控制結...
XML DOm方法備忘錄
作 用 加上乙個節點當作指定節點最後的子節點。基本語法 說 明 newchild 是附加子節點的位址。範 例 docobj xmldoc.documentelement alert docobj.xml createattribute方法 作 用 建立乙個指定名稱的屬性。基本語法 xmldocume...
python方法備忘錄
1 is instance arg1,arg2 查詢arg1的型別是否是arg2 from collections import iterable print isinstance a,iterable 查詢 a 是否是可迭代物件 2 重新匯入模組 import test from ipm impo...