首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >记忆化和动态编程的区别是什么?

记忆化和动态编程的区别是什么?
EN

Stack Overflow用户
提问于 2011-05-31 16:28:32
回答 1查看 110.6K关注 0票数 314

记忆化和动态编程的区别是什么?我认为动态编程是记忆化的一个子集。是对的吗?

EN

回答 1

Stack Overflow用户

发布于 2021-09-17 15:04:36

这是一个用Java写的来自Fibonacci Number问题的记忆和DP的例子。

这里的动态编程不涉及递归,因为结果更快,并且可以计算更高的值,因为它不受执行堆栈的限制。

代码语言:javascript
复制
public class Solution {

 public static long fibonacciMemoization(int i) {
    return fibonacciMemoization(i, new long[i + 1]);
 }

 public static long fibonacciMemoization(int i, long[] memo) {
    if (i <= 1) {
        return 1;
    }
    if (memo[i] != 0) {
        return memo[i];
    }
    long val = fibonacciMemoization(i - 1, memo) + fibonacciMemoization(i - 2, memo);
    memo[i] = val;
    return val;
 }

 public static long fibonacciDynamicPrograming(int i) {
    if (i <= 1) {
        return i;
    }
    long[] memo = new long[i + 1];
    memo[0] = 1;
    memo[1] = 1;
    memo[2] = 2;
    for (int j = 3; j <= i; j++) {
        memo[j] = memo[j - 1] + memo[j - 2];
    }
    return memo[i];
 }

 public static void main(String[] args) {
    System.out.println("Fibonacci with Dynamic Programing");
    System.out.println(fibonacciDynamicPrograming(10));
    System.out.println(fibonacciDynamicPrograming(1_000_000));

    System.out.println("Fibonacci with Memoization");
    System.out.println(fibonacciMemoization(10));
    System.out.println(fibonacciMemoization(1_000_000)); //stackoverflow exception
 }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6184869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档