This commit is contained in:
krahets
2023-07-31 03:27:17 +08:00
parent 5039f48f06
commit a5fc6d3215
13 changed files with 737 additions and 367 deletions

View File

@ -3382,10 +3382,10 @@
<h1 id="142">14.2. &nbsp; 动态规划问题特性<a class="headerlink" href="#142" title="Permanent link">&para;</a></h1>
<p>在上节中,我们学习了动态规划是如何通过子问题分解来求解问题的。实际上,子问题分解是一种通用的算法思路,在分治、动态规划、回溯中各有特点</p>
<p>在上节中,我们学习了动态规划是如何通过子问题分解来求解问题的。实际上,子问题分解是一种通用的算法思路,在分治、动态规划、回溯中的侧重点不同</p>
<ul>
<li>「分治算法」递归地将原问题划分为多个相独立的子问题,直至最小子问题,并在回溯中合并子问题的解,最终得到原问题的解。</li>
<li>「动态规划」也对问题进行递归分解,但与分治算法的主要区别是,<strong>动态规划中的子问题往往不是相互独立的</strong>,原问题的解依赖于子问题的解,而子问题的解又依赖于更小的子问题的解</li>
<li>「分治算法」递归地将原问题划分为多个相独立的子问题,直至最小子问题,并在回溯中合并子问题的解,最终得到原问题的解。</li>
<li>「动态规划」也对问题进行递归分解,但与分治算法的主要区别是,动态规划中的子问题是相互依赖的,在分解过程中会出现许多重叠子问题。</li>
<li>「回溯算法」在尝试和回退中穷举所有可能的解,并通过剪枝避免不必要的搜索分支。原问题的解由一系列决策步骤构成,我们可以将每个决策步骤之前的子序列看作为一个子问题。</li>
</ul>
<p>实际上,动态规划常用来求解最优化问题,它们不仅包含重叠子问题,还具有另外两大特性:最优子结构、无后效性。</p>