在我开始之前,不,这不是一个问记忆化和动态编程之间有什么区别或者哪个更好的问题,而只是一个简单的问题,询问它们处理缓存查找的方式之间的细微差别。
DP 使用自下而上的方法,而 memoization 使用自上而下的方法。因此,使用 DP,您首先构建一个缓存计算表,然后将这些缓存值提供给更大的计算,以避免冗余的递归或迭代函数调用。记忆或多或少只是将每个函数调用的结果缓存到哈希或数组(可能是数组)中,然后在函数调用中提供结果(它只是跳过函数体内发生的任何事情)。
我的问题是我在这里所说的是否正确?这两种方法看起来很相似,只有 DP 与记忆相比更难,并且在记忆方面的效率略高。有了 memoization,你的程序仍然必须触发每个函数调用,即使它被缓存了,而且这些函数调用中的每一个都可以快速填满堆栈,而在 DP 中它会检查函数内的数组表并且只调用递归/iterative 函数,如果它没有找到。
我在这里正确吗?还是我错过了什么?