| 作者 | 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,
我想這應該就是官方專有名稱吧
|