This commit is contained in:
krahets
2023-11-09 05:13:54 +08:00
parent 9a09f9407e
commit 3f666fa676
85 changed files with 619 additions and 610 deletions

View File

@ -3387,7 +3387,7 @@
<p>给定 <span class="arithmatex">\(n\)</span> 个物品,第 <span class="arithmatex">\(i\)</span> 个物品的重量为 <span class="arithmatex">\(wgt[i-1]\)</span>、价值为 <span class="arithmatex">\(val[i-1]\)</span> ,和一个容量为 <span class="arithmatex">\(cap\)</span> 的背包。每个物品只能选择一次,问在不超过背包容量下能放入物品的最大价值。</p>
</div>
<p>观察图 14-17 ,由于物品编号 <span class="arithmatex">\(i\)</span><span class="arithmatex">\(1\)</span> 开始计数,数组索引从 <span class="arithmatex">\(0\)</span> 开始计数,因此物品 <span class="arithmatex">\(i\)</span> 对应重量 <span class="arithmatex">\(wgt[i-1]\)</span> 和价值 <span class="arithmatex">\(val[i-1]\)</span></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_example.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="0-1 背包的示例数据" src="../knapsack_problem.assets/knapsack_example.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_example.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="0-1 背包的示例数据" class="animation-figure" src="../knapsack_problem.assets/knapsack_example.png" /></a></p>
<p align="center"> 图 14-17 &nbsp; 0-1 背包的示例数据 </p>
<p>我们可以将 0-1 背包问题看作是一个由 <span class="arithmatex">\(n\)</span> 轮决策组成的过程,每个物体都有不放入和放入两种决策,因此该问题是满足决策树模型的。</p>
@ -3655,7 +3655,7 @@ dp[i, c] = \max(dp[i-1, c], dp[i-1, c - wgt[i-1]] + val[i-1])
</div>
<p>如图 14-18 所示,由于每个物品都会产生不选和选两条搜索分支,因此时间复杂度为 <span class="arithmatex">\(O(2^n)\)</span></p>
<p>观察递归树,容易发现其中存在重叠子问题,例如 <span class="arithmatex">\(dp[1, 10]\)</span> 等。而当物品较多、背包容量较大,尤其是相同重量的物品较多时,重叠子问题的数量将会大幅增多。</p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dfs.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="0-1 背包的暴力搜索递归树" src="../knapsack_problem.assets/knapsack_dfs.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dfs.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="0-1 背包的暴力搜索递归树" class="animation-figure" src="../knapsack_problem.assets/knapsack_dfs.png" /></a></p>
<p align="center"> 图 14-18 &nbsp; 0-1 背包的暴力搜索递归树 </p>
<h3 id="2">2. &nbsp; 方法二:记忆化搜索<a class="headerlink" href="#2" title="Permanent link">&para;</a></h3>
@ -3966,7 +3966,7 @@ dp[i, c] = \max(dp[i-1, c], dp[i-1, c - wgt[i-1]] + val[i-1])
</div>
</div>
<p>图 14-19 展示了在记忆化递归中被剪掉的搜索分支。</p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dfs_mem.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="0-1 背包的记忆化搜索递归树" src="../knapsack_problem.assets/knapsack_dfs_mem.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dfs_mem.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="0-1 背包的记忆化搜索递归树" class="animation-figure" src="../knapsack_problem.assets/knapsack_dfs_mem.png" /></a></p>
<p align="center"> 图 14-19 &nbsp; 0-1 背包的记忆化搜索递归树 </p>
<h3 id="3">3. &nbsp; 方法三:动态规划<a class="headerlink" href="#3" title="Permanent link">&para;</a></h3>
@ -4257,46 +4257,46 @@ dp[i, c] = \max(dp[i-1, c], dp[i-1, c - wgt[i-1]] + val[i-1])
<div class="tabbed-set tabbed-alternate" data-tabs="4:14"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><input id="__tabbed_4_3" name="__tabbed_4" type="radio" /><input id="__tabbed_4_4" name="__tabbed_4" type="radio" /><input id="__tabbed_4_5" name="__tabbed_4" type="radio" /><input id="__tabbed_4_6" name="__tabbed_4" type="radio" /><input id="__tabbed_4_7" name="__tabbed_4" type="radio" /><input id="__tabbed_4_8" name="__tabbed_4" type="radio" /><input id="__tabbed_4_9" name="__tabbed_4" type="radio" /><input id="__tabbed_4_10" name="__tabbed_4" type="radio" /><input id="__tabbed_4_11" name="__tabbed_4" type="radio" /><input id="__tabbed_4_12" name="__tabbed_4" type="radio" /><input id="__tabbed_4_13" name="__tabbed_4" type="radio" /><input id="__tabbed_4_14" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">&lt;1&gt;</label><label for="__tabbed_4_2">&lt;2&gt;</label><label for="__tabbed_4_3">&lt;3&gt;</label><label for="__tabbed_4_4">&lt;4&gt;</label><label for="__tabbed_4_5">&lt;5&gt;</label><label for="__tabbed_4_6">&lt;6&gt;</label><label for="__tabbed_4_7">&lt;7&gt;</label><label for="__tabbed_4_8">&lt;8&gt;</label><label for="__tabbed_4_9">&lt;9&gt;</label><label for="__tabbed_4_10">&lt;10&gt;</label><label for="__tabbed_4_11">&lt;11&gt;</label><label for="__tabbed_4_12">&lt;12&gt;</label><label for="__tabbed_4_13">&lt;13&gt;</label><label for="__tabbed_4_14">&lt;14&gt;</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step1.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="0-1 背包的动态规划过程" src="../knapsack_problem.assets/knapsack_dp_step1.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step1.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="0-1 背包的动态规划过程" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_step1.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step2" src="../knapsack_problem.assets/knapsack_dp_step2.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step2" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_step2.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step3.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step3" src="../knapsack_problem.assets/knapsack_dp_step3.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step3.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step3" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_step3.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step4.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step4" src="../knapsack_problem.assets/knapsack_dp_step4.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step4.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step4" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_step4.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step5.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step5" src="../knapsack_problem.assets/knapsack_dp_step5.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step5.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step5" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_step5.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step6.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step6" src="../knapsack_problem.assets/knapsack_dp_step6.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step6.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step6" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_step6.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step7.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step7" src="../knapsack_problem.assets/knapsack_dp_step7.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step7.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step7" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_step7.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step8.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step8" src="../knapsack_problem.assets/knapsack_dp_step8.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step8.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step8" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_step8.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step9.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step9" src="../knapsack_problem.assets/knapsack_dp_step9.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step9.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step9" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_step9.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step10.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step10" src="../knapsack_problem.assets/knapsack_dp_step10.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step10.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step10" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_step10.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step11.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step11" src="../knapsack_problem.assets/knapsack_dp_step11.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step11.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step11" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_step11.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step12.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step12" src="../knapsack_problem.assets/knapsack_dp_step12.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step12.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step12" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_step12.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step13.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step13" src="../knapsack_problem.assets/knapsack_dp_step13.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step13.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step13" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_step13.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step14.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step14" src="../knapsack_problem.assets/knapsack_dp_step14.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_step14.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_step14" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_step14.png" /></a></p>
</div>
</div>
</div>
@ -4313,22 +4313,22 @@ dp[i, c] = \max(dp[i-1, c], dp[i-1, c - wgt[i-1]] + val[i-1])
<div class="tabbed-set tabbed-alternate" data-tabs="5:6"><input checked="checked" id="__tabbed_5_1" name="__tabbed_5" type="radio" /><input id="__tabbed_5_2" name="__tabbed_5" type="radio" /><input id="__tabbed_5_3" name="__tabbed_5" type="radio" /><input id="__tabbed_5_4" name="__tabbed_5" type="radio" /><input id="__tabbed_5_5" name="__tabbed_5" type="radio" /><input id="__tabbed_5_6" name="__tabbed_5" type="radio" /><div class="tabbed-labels"><label for="__tabbed_5_1">&lt;1&gt;</label><label for="__tabbed_5_2">&lt;2&gt;</label><label for="__tabbed_5_3">&lt;3&gt;</label><label for="__tabbed_5_4">&lt;4&gt;</label><label for="__tabbed_5_5">&lt;5&gt;</label><label for="__tabbed_5_6">&lt;6&gt;</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_comp_step1.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="0-1 背包的空间优化后的动态规划过程" src="../knapsack_problem.assets/knapsack_dp_comp_step1.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_comp_step1.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="0-1 背包的空间优化后的动态规划过程" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_comp_step1.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_comp_step2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_comp_step2" src="../knapsack_problem.assets/knapsack_dp_comp_step2.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_comp_step2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_comp_step2" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_comp_step2.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_comp_step3.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_comp_step3" src="../knapsack_problem.assets/knapsack_dp_comp_step3.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_comp_step3.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_comp_step3" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_comp_step3.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_comp_step4.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_comp_step4" src="../knapsack_problem.assets/knapsack_dp_comp_step4.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_comp_step4.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_comp_step4" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_comp_step4.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_comp_step5.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_comp_step5" src="../knapsack_problem.assets/knapsack_dp_comp_step5.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_comp_step5.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_comp_step5" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_comp_step5.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_comp_step6.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_comp_step6" src="../knapsack_problem.assets/knapsack_dp_comp_step6.png" /></a></p>
<p><a class="glightbox" href="../knapsack_problem.assets/knapsack_dp_comp_step6.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="knapsack_dp_comp_step6" class="animation-figure" src="../knapsack_problem.assets/knapsack_dp_comp_step6.png" /></a></p>
</div>
</div>
</div>