作者  fcamel (飛啊!乘月的小駱駝)  看板   P_fcamel
 標題  [algo]   Memoization (Tabulation)
 時間  Thu Aug 4 23:27:58 2005


標題可沒打錯字, 是Memoization, 不是Memorization[*1],
用Google搜後者會有較多筆資料,
但用前者搜馬上會看到定義的網頁

它又稱為Tabulation, 這名稱也挺貼切的

一言以蔽之, 就是用額外的表格記下遞迴運算的過程,
遇到已算過的答案就直接取值,
沒算過就計算一遍後存入表格內

好處是它保留recursion的直覺設計兼iteration的效率,
畢竟recursion(Top-Down)轉iteration(Bottom-Up)在許多情況下相當不好設計,
而recursion又容易重覆執行已計算過的東西

ex: 算Fibonacci Number
( 我直接抄網上的pseudo code, 懶得自己寫了 )

http://www.nist.gov/dads/HTML/memoize.html

    allocate array for memo;
    initialize memo[1] and memo[2] to 1;

    fib(n) {
       if memo[n] is not zero, return memo[n];
       memo[n] = fib(n-1) + fib(n-2);
       return memo[n];
    }

PS

*1 我以前學Dynamic Programming的技巧時有學過它,
   那時我照著該文件作者的說法, 稱它為memory function,
   SICP p41, foot note 34稱它為Tabulation or memoization,
   我想這應該就是官方專有名稱吧