Memoization
是一种动态编程技术,其中昂贵的函数调用的结果被存储和重用,防止冗余计算并提高性能。
示例记忆
import java.util.HashMap;
import java.util.Map;
public class Fibonacci {
private static Map<Integer, Integer> memory = new HashMap<>();
public static void main(String[] args) {
int result = calculateFibonacci(5);
System.out.println("Fibonacci number at position 5 is: " + result);
}
private static int calculateFibonacci(int n) {
if (n <= 1) { return n;}
if (memory.containsKey(n)) { return memory.get(n); }
int fib = calculateFibonacci(n - 1) + calculateFibonacci(n - 2);
memory.put(n, fib);
return fib;
}
}
通过解释清楚地定义并通过示例举例说明,该技术涉及利用内存为结果创建缓存并存储值。在日常语言中,这种行为也称为记忆。术语中省略“r”根本没有必要,并且会使命名定义变得模糊。
我想知道为什么这种技术被称为“memoization”而不是“memorization”?
正是因为它不是“记忆”,并且具有超越简单记忆某些内容的特定含义。
根据维基百科,关于memoization(强调我的):
“memoization”一词由 Donald Michie 在 1968 年创造,源自拉丁语“memorandum”(“被记住”),在美式英语中通常被截断为“memo”,因此带有“转动[ ]将函数的结果转化为要被记住的东西”。 虽然“memoization”可能与“memorization”混淆(因为它们是词源上的同源词),但“memoization”在计算中具有特殊的含义。
虽然记忆是一般性的
将某事记入记忆的过程