为什么叫记忆化?

问题描述 投票:0回答:1

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”?

java algorithm data-structures dynamic-programming memoization
1个回答
0
投票

正是因为它不是“记忆”,并且具有超越简单记忆某些内容的特定含义。

根据维基百科,关于memoization(强调我的):

“memoization”一词由 Donald Michie 在 1968 年创造,源自拉丁语“memorandum”(“被记住”),在美式英语中通常被截断为“memo”,因此带有“转动[ ]将函数的结果转化为要被记住的东西”。 虽然“memoization”可能与“memorization”混淆(因为它们是词源上的同源词),但“memoization”在计算中具有特殊的含义。

虽然记忆是一般性的

将某事记入记忆的过程

© www.soinside.com 2019 - 2024. All rights reserved.