【发布时间】:2017-06-08 15:53:24
【问题描述】:
我什么时候选择记忆而不是动态编程?
它们似乎都具有相同的时间和空间复杂性。
那么,偏好其中一个而不是另一个的经验法则是什么?
【问题讨论】:
标签: recursion dynamic-programming memoization
我什么时候选择记忆而不是动态编程?
它们似乎都具有相同的时间和空间复杂性。
那么,偏好其中一个而不是另一个的经验法则是什么?
【问题讨论】:
标签: recursion dynamic-programming memoization
Memoization 是一种用于动态编程的技术,而不是一个单独的实体。时间/空间复杂度取决于算法和实现。
Dynamic programming,一般来说,是一种识别作业中常见子任务的策略。您无需多次执行子任务,而是使用执行周期以外的系统资源来捕获执行结果以供以后使用。
通常,这是存储计算结果以避免重复计算工作的简单问题。在大多数情况下,这涉及存储由参数值索引的功能结果。这是记忆。
更详细的...
DP 有两种基本风格:自上而下和自下而上。自下而上的方法从基本情况开始,一直到请求的结果。这通常通过一个简单的迭代循环和一个存储中间结果的数组来实现。
自上而下的方法是记忆。这将原始请求分解为更小的问题,并在每个问题上重复出现。在解决每个子问题时,它会存储结果以供其他需要相同结果的分支使用。
【讨论】: