何时选择动态编程的记忆?
它们似乎都具有相同的时间和空间复杂性
那么选择一个而不是另一个的经验法则是什么呢?
答案 0 :(得分:1)
Memoization是一种用于动态编程的技术,而不是一个单独的实体。时间/空间复杂性取决于算法和实现。
总的来说,Dynamic programming是一种识别作业中常见子任务的策略。您可以使用除执行周期之外的系统资源来捕获执行结果以供以后使用,而不是多次执行子任务。
通常,这是存储计算结果以避免重复计算工作的简单问题。在大多数情况下,这涉及存储功能结果,由参数值索引。这是记忆。
更详细......
DP有两种基本风格:自上而下和自下而上。自下而上的方法从基本情况开始,并处理所请求的结果。这通常通过简单的迭代循环和用于存储中间结果的数组来实现。
自上而下的方法是memoization。这会将原始请求分解为更小的问题,并在每个问题上重复出现。因为它解决了每个子问题,所以它存储了需要相同结果的其他分支使用的结果。