動態規劃演算法的乙個變形是備忘錄方法。備忘錄方法也用乙個**來儲存已解決的子問題的答案,在下次需要解決此問題時,只要簡單地檢視該子問題的解答,而不必重新計算。與動態規劃演算法不同的是,備忘錄方法的遞迴方式是自頂向下的,而動態規劃演算法則是自底向上遞迴的。因此,備忘錄方法的控制結構與直接遞迴方法的控制結構相同,區別在於備忘錄方法為每個解過的子問題建立了備忘錄以備需要時檢視,避免了相同子問題的重複求解。
備忘錄方法為每個子問題建立了乙個記錄項,初始化時,該記錄項存入乙個特殊的值,表示該子問題尚未求解。在求解過程中,對每個待求的子問題,首先檢視相應的記錄項。若記錄項中儲存的是初始化時存入的特殊值,則表示該子問題是第一次遇到,則此時計算出該子問題的解,並儲存在相應的記錄項中。若記錄項中儲存的已不是初始化時存入的特殊值,則表示該問題已被計算過,其相應的記錄項中儲存的是該子問題的解答。此時,只要從記錄項中取出該子問題的解答即可。
一般來講,當乙個問題的所有子問題至少要解一次時,則用動態規劃演算法比用備忘錄演算法好。此時,動態規劃演算法沒有任何多餘的計算,還可利用其規則的**訪問方式,來減少在動態規劃演算法中的計算時間和空間需求。當子問題空間中部分子問題可不必求解時,用備忘錄方法則較有利,因為從其控制結構可以看出,該方法只解那些確實需要求解的子問題。
備忘錄方法
該法是動態規劃的變形,或者可以理解為動態規劃的優化,優化在增強理解和書寫簡單方面。public static int recurmatrixchain int i,int j 遞迴求解問題並先查表 public static int lookupchain int i,int j if m i j ...
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...