【问题标题】:Solving sub-problems解决子问题
【发布时间】:2017-06-08 15:53:24
【问题描述】:

我什么时候选择记忆而不是动态编程?
它们似乎都具有相同的时间和空间复杂性。
那么,偏好其中一个而不是另一个的经验法则是什么?

【问题讨论】:

    标签: recursion dynamic-programming memoization


    【解决方案1】:

    Memoization 是一种用于动态编程的技术,而不是一个单独的实体。时间/空间复杂度取决于算法和实现。

    Dynamic programming,一般来说,是一种识别作业中常见子任务的策略。您无需多次执行子任务,而是使用执行周期以外的系统资源来捕获执行结果以供以后使用。

    通常,这是存储计算结果以避免重复计算工作的简单问题。在大多数情况下,这涉及存储由参数值索引的功能结果。这是记忆。

    更详细的...

    DP 有两种基本风格:自上而下和自下而上。自下而上的方法从基本情况开始,一直到请求的结果。这通常通过一个简单的迭代循环和一个存储中间结果的数组来实现。

    自上而下的方法是记忆。这将原始请求分解为更小的问题,并在每个问题上重复出现。在解决每个子问题时,它会存储结果以供其他需要相同结果的分支使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多