mirror of
https://github.com/krahets/hello-algo.git
synced 2025-07-10 17:00:45 +08:00
deploy
This commit is contained in:
@ -25,7 +25,7 @@
|
||||
|
||||
|
||||
|
||||
<title>12.1. 回溯算法 - Hello 算法</title>
|
||||
<title>13.1. 回溯算法 - Hello 算法</title>
|
||||
|
||||
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#121" class="md-skip">
|
||||
<a href="#131" class="md-skip">
|
||||
跳转至
|
||||
</a>
|
||||
|
||||
@ -113,7 +113,7 @@
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
12.1. 回溯算法
|
||||
13.1. 回溯算法
|
||||
|
||||
</span>
|
||||
</div>
|
||||
@ -1752,6 +1752,87 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_divide_and_conquer/">12. 分治</a>
|
||||
|
||||
<label for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 分治
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_divide_and_conquer/divide_and_conquer/" class="md-nav__link">
|
||||
12.1. 分治算法(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_divide_and_conquer/build_binary_tree/" class="md-nav__link">
|
||||
12.2. 构建树问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1761,7 +1842,7 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" checked>
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" checked>
|
||||
|
||||
|
||||
|
||||
@ -1784,18 +1865,18 @@
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../">12. 回溯</a>
|
||||
<a href="../">13. 回溯</a>
|
||||
|
||||
<label for="__nav_13">
|
||||
<label for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 回溯
|
||||
13. 回溯
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1817,12 +1898,12 @@
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
||||
12.1. 回溯算法
|
||||
13.1. 回溯算法
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<a href="./" class="md-nav__link md-nav__link--active">
|
||||
12.1. 回溯算法
|
||||
13.1. 回溯算法
|
||||
</a>
|
||||
|
||||
|
||||
@ -1841,43 +1922,43 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1211" class="md-nav__link">
|
||||
12.1.1. 尝试与回退
|
||||
<a href="#1311" class="md-nav__link">
|
||||
13.1.1. 尝试与回退
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1212" class="md-nav__link">
|
||||
12.1.2. 剪枝
|
||||
<a href="#1312" class="md-nav__link">
|
||||
13.1.2. 剪枝
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1213" class="md-nav__link">
|
||||
12.1.3. 常用术语
|
||||
<a href="#1313" class="md-nav__link">
|
||||
13.1.3. 常用术语
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1214" class="md-nav__link">
|
||||
12.1.4. 框架代码
|
||||
<a href="#1314" class="md-nav__link">
|
||||
13.1.4. 框架代码
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1215" class="md-nav__link">
|
||||
12.1.5. 优势与局限性
|
||||
<a href="#1315" class="md-nav__link">
|
||||
13.1.5. 优势与局限性
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1216" class="md-nav__link">
|
||||
12.1.6. 典型例题
|
||||
<a href="#1316" class="md-nav__link">
|
||||
13.1.6. 典型例题
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -1898,7 +1979,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../permutations_problem/" class="md-nav__link">
|
||||
12.2. 全排列问题
|
||||
13.2. 全排列问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1912,7 +1993,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../subset_sum_problem/" class="md-nav__link">
|
||||
12.3. 子集和问题
|
||||
13.3. 子集和问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1926,7 +2007,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../n_queens_problem/" class="md-nav__link">
|
||||
12.4. N 皇后问题
|
||||
13.4. N 皇后问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1940,168 +2021,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../summary/" class="md-nav__link">
|
||||
12.5. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_dynamic_programming/">13. 动态规划</a>
|
||||
|
||||
<label for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
13. 动态规划
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/intro_to_dynamic_programming/" class="md-nav__link">
|
||||
13.1. 初探动态规划(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_problem_features/" class="md-nav__link">
|
||||
13.2. DP 问题特性(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_solution_pipeline/" class="md-nav__link">
|
||||
13.3. DP 解题思路(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/knapsack_problem/" class="md-nav__link">
|
||||
13.4. 0-1 背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/unbounded_knapsack_problem/" class="md-nav__link">
|
||||
13.5. 完全背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/edit_distance_problem/" class="md-nav__link">
|
||||
13.6. 编辑距离问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/summary/" class="md-nav__link">
|
||||
13.7. 小结(New)
|
||||
13.5. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2132,31 +2052,53 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_15" id="__nav_15_label" tabindex="0">
|
||||
14. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_dynamic_programming/">14. 动态规划</a>
|
||||
|
||||
<label for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_15_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
14. 附录
|
||||
14. 动态规划
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
14.1. 编程环境安装
|
||||
<a href="../../chapter_dynamic_programming/intro_to_dynamic_programming/" class="md-nav__link">
|
||||
14.1. 初探动态规划(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2169,8 +2111,78 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
14.2. 一起参与创作
|
||||
<a href="../../chapter_dynamic_programming/dp_problem_features/" class="md-nav__link">
|
||||
14.2. DP 问题特性(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_solution_pipeline/" class="md-nav__link">
|
||||
14.3. DP 解题思路(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/knapsack_problem/" class="md-nav__link">
|
||||
14.4. 0-1 背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/unbounded_knapsack_problem/" class="md-nav__link">
|
||||
14.5. 完全背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/edit_distance_problem/" class="md-nav__link">
|
||||
14.6. 编辑距离问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/summary/" class="md-nav__link">
|
||||
14.7. 小结(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2201,6 +2213,75 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_16" id="__nav_16_label" tabindex="0">
|
||||
15. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
15. 附录
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
15.1. 编程环境安装
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
15.2. 一起参与创作
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_17" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2213,8 +2294,8 @@
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_17_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_17">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
参考文献
|
||||
</label>
|
||||
@ -2255,43 +2336,43 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1211" class="md-nav__link">
|
||||
12.1.1. 尝试与回退
|
||||
<a href="#1311" class="md-nav__link">
|
||||
13.1.1. 尝试与回退
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1212" class="md-nav__link">
|
||||
12.1.2. 剪枝
|
||||
<a href="#1312" class="md-nav__link">
|
||||
13.1.2. 剪枝
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1213" class="md-nav__link">
|
||||
12.1.3. 常用术语
|
||||
<a href="#1313" class="md-nav__link">
|
||||
13.1.3. 常用术语
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1214" class="md-nav__link">
|
||||
12.1.4. 框架代码
|
||||
<a href="#1314" class="md-nav__link">
|
||||
13.1.4. 框架代码
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1215" class="md-nav__link">
|
||||
12.1.5. 优势与局限性
|
||||
<a href="#1315" class="md-nav__link">
|
||||
13.1.5. 优势与局限性
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1216" class="md-nav__link">
|
||||
12.1.6. 典型例题
|
||||
<a href="#1316" class="md-nav__link">
|
||||
13.1.6. 典型例题
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -2319,7 +2400,7 @@
|
||||
|
||||
|
||||
|
||||
<h1 id="121">12.1. 回溯算法<a class="headerlink" href="#121" title="Permanent link">¶</a></h1>
|
||||
<h1 id="131">13.1. 回溯算法<a class="headerlink" href="#131" title="Permanent link">¶</a></h1>
|
||||
<p>「回溯算法 Backtracking Algorithm」是一种通过穷举来解决问题的方法,它的核心思想是从一个初始状态出发,暴力搜索所有可能的解决方案,当遇到正确的解则将其记录,直到找到解或者尝试了所有可能的选择都无法找到解为止。</p>
|
||||
<p>回溯算法通常采用「深度优先搜索」来遍历解空间。在二叉树章节中,我们提到前序、中序和后序遍历都属于深度优先搜索。接下来我们先用前序遍历构造一个回溯问题,逐步了解回溯算法的工作原理。</p>
|
||||
<div class="admonition question">
|
||||
@ -2463,7 +2544,7 @@
|
||||
<p><img alt="在前序遍历中搜索节点" src="../backtracking_algorithm.assets/preorder_find_nodes.png" /></p>
|
||||
<p align="center"> Fig. 在前序遍历中搜索节点 </p>
|
||||
|
||||
<h2 id="1211">12.1.1. 尝试与回退<a class="headerlink" href="#1211" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1311">13.1.1. 尝试与回退<a class="headerlink" href="#1311" title="Permanent link">¶</a></h2>
|
||||
<p><strong>之所以称之为回溯算法,是因为该算法在搜索解空间时会采用“尝试”与“回退”的策略</strong>。当算法在搜索过程中遇到某个状态无法继续前进或无法得到满足条件的解时,它会撤销上一步的选择,退回到之前的状态,并尝试其他可能的选择。</p>
|
||||
<p>对于例题一,访问每个节点都代表一次“尝试”,而越过叶结点或返回父节点的 <code>return</code> 则表示“回退”。</p>
|
||||
<p>值得说明的是,<strong>回退并不等价于函数返回</strong>。为解释这一点,我们对例题一稍作拓展。</p>
|
||||
@ -2679,7 +2760,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2 id="1212">12.1.2. 剪枝<a class="headerlink" href="#1212" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1312">13.1.2. 剪枝<a class="headerlink" href="#1312" title="Permanent link">¶</a></h2>
|
||||
<p>复杂的回溯问题通常包含一个或多个约束条件,<strong>约束条件通常可用于“剪枝”</strong>。</p>
|
||||
<div class="admonition question">
|
||||
<p class="admonition-title">例题三</p>
|
||||
@ -2867,7 +2948,7 @@
|
||||
<p><img alt="根据约束条件剪枝" src="../backtracking_algorithm.assets/preorder_find_constrained_paths.png" /></p>
|
||||
<p align="center"> Fig. 根据约束条件剪枝 </p>
|
||||
|
||||
<h2 id="1213">12.1.3. 常用术语<a class="headerlink" href="#1213" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1313">13.1.3. 常用术语<a class="headerlink" href="#1313" title="Permanent link">¶</a></h2>
|
||||
<p>为了更清晰地分析算法问题,我们总结一下回溯算法中常用术语的含义,并对照例题三给出对应示例。</p>
|
||||
<table>
|
||||
<thead>
|
||||
@ -2914,7 +2995,7 @@
|
||||
<p class="admonition-title">Tip</p>
|
||||
<p>解、状态、约束条件等术语是通用的,适用于回溯算法、动态规划、贪心算法等。</p>
|
||||
</div>
|
||||
<h2 id="1214">12.1.4. 框架代码<a class="headerlink" href="#1214" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1314">13.1.4. 框架代码<a class="headerlink" href="#1314" title="Permanent link">¶</a></h2>
|
||||
<p>回溯算法可用于解决许多搜索问题、约束满足问题和组合优化问题。为提升代码通用性,我们希望将回溯算法的“尝试、回退、剪枝”的主体框架提炼出来。</p>
|
||||
<p>设 <code>state</code> 为问题的当前状态,<code>choices</code> 表示当前状态下可以做出的选择,则可得到以下回溯算法的框架代码。</p>
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="5:11"><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" /><input id="__tabbed_5_7" name="__tabbed_5" type="radio" /><input id="__tabbed_5_8" name="__tabbed_5" type="radio" /><input id="__tabbed_5_9" name="__tabbed_5" type="radio" /><input id="__tabbed_5_10" name="__tabbed_5" type="radio" /><input id="__tabbed_5_11" name="__tabbed_5" type="radio" /><div class="tabbed-labels"><label for="__tabbed_5_1">Java</label><label for="__tabbed_5_2">C++</label><label for="__tabbed_5_3">Python</label><label for="__tabbed_5_4">Go</label><label for="__tabbed_5_5">JavaScript</label><label for="__tabbed_5_6">TypeScript</label><label for="__tabbed_5_7">C</label><label for="__tabbed_5_8">C#</label><label for="__tabbed_5_9">Swift</label><label for="__tabbed_5_10">Zig</label><label for="__tabbed_5_11">Dart</label></div>
|
||||
@ -3590,7 +3671,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<p>相较于基于前序遍历的实现代码,基于回溯算法框架的实现代码虽然显得啰嗦,但通用性更好。实际上,<strong>所有回溯问题都可以在该框架下解决</strong>。我们需要根据具体问题来定义 <code>state</code> 和 <code>choices</code> ,并实现框架中的各个方法。</p>
|
||||
<h2 id="1215">12.1.5. 优势与局限性<a class="headerlink" href="#1215" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1315">13.1.5. 优势与局限性<a class="headerlink" href="#1315" title="Permanent link">¶</a></h2>
|
||||
<p>回溯算法本质上是一种深度优先搜索算法,它尝试所有可能的解决方案直到找到满足条件的解。这种方法的优势在于它能够找到所有可能的解决方案,而且在合理的剪枝操作下,具有很高的效率。</p>
|
||||
<p>然而,在处理大规模或者复杂问题时,<strong>回溯算法的运行效率可能难以接受</strong>。</p>
|
||||
<ul>
|
||||
@ -3602,7 +3683,7 @@
|
||||
<li>上文介绍过的剪枝是一种常用的优化方法。它可以避免搜索那些肯定不会产生有效解的路径,从而节省时间和空间。</li>
|
||||
<li>另一个常用的优化方法是加入「启发式搜索 Heuristic Search」策略,它在搜索过程中引入一些策略或者估计值,从而优先搜索最有可能产生有效解的路径。</li>
|
||||
</ul>
|
||||
<h2 id="1216">12.1.6. 典型例题<a class="headerlink" href="#1216" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1316">13.1.6. 典型例题<a class="headerlink" href="#1316" title="Permanent link">¶</a></h2>
|
||||
<p><strong>搜索问题</strong>:这类问题的目标是找到满足特定条件的解决方案。</p>
|
||||
<ul>
|
||||
<li>全排列问题:给定一个集合,求出其所有可能的排列组合。</li>
|
||||
@ -3699,7 +3780,7 @@
|
||||
<nav class="md-footer__inner md-grid" aria-label="页脚" >
|
||||
|
||||
|
||||
<a href="../" class="md-footer__link md-footer__link--prev" aria-label="上一页: 12. &nbsp; 回溯" rel="prev">
|
||||
<a href="../" class="md-footer__link md-footer__link--prev" aria-label="上一页: 13. &nbsp; 回溯" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
@ -3708,20 +3789,20 @@
|
||||
上一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
12. 回溯
|
||||
13. 回溯
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="../permutations_problem/" class="md-footer__link md-footer__link--next" aria-label="下一页: 12.2. &nbsp; 全排列问题" rel="next">
|
||||
<a href="../permutations_problem/" class="md-footer__link md-footer__link--next" aria-label="下一页: 13.2. &nbsp; 全排列问题" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<span class="md-footer__direction">
|
||||
下一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
12.2. 全排列问题
|
||||
13.2. 全排列问题
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
|
@ -15,7 +15,7 @@
|
||||
<link rel="canonical" href="https://www.hello-algo.com/chapter_backtracking/">
|
||||
|
||||
|
||||
<link rel="prev" href="../chapter_sorting/summary/">
|
||||
<link rel="prev" href="../chapter_divide_and_conquer/build_binary_tree/">
|
||||
|
||||
|
||||
<link rel="next" href="backtracking_algorithm/">
|
||||
@ -25,7 +25,7 @@
|
||||
|
||||
|
||||
|
||||
<title>12. 回溯 - Hello 算法</title>
|
||||
<title>13. 回溯 - Hello 算法</title>
|
||||
|
||||
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#12" class="md-skip">
|
||||
<a href="#13" class="md-skip">
|
||||
跳转至
|
||||
</a>
|
||||
|
||||
@ -113,7 +113,7 @@
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
12. 回溯
|
||||
13. 回溯
|
||||
|
||||
</span>
|
||||
</div>
|
||||
@ -1752,6 +1752,87 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../chapter_divide_and_conquer/">12. 分治</a>
|
||||
|
||||
<label for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 分治
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_divide_and_conquer/divide_and_conquer/" class="md-nav__link">
|
||||
12.1. 分治算法(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_divide_and_conquer/build_binary_tree/" class="md-nav__link">
|
||||
12.2. 构建树问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1761,7 +1842,7 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" checked>
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" checked>
|
||||
|
||||
|
||||
|
||||
@ -1784,18 +1865,18 @@
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index md-nav__link--active">
|
||||
<a href="./">12. 回溯</a>
|
||||
<a href="./">13. 回溯</a>
|
||||
|
||||
<label for="__nav_13">
|
||||
<label for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 回溯
|
||||
13. 回溯
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1808,7 +1889,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="backtracking_algorithm/" class="md-nav__link">
|
||||
12.1. 回溯算法
|
||||
13.1. 回溯算法
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1822,7 +1903,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="permutations_problem/" class="md-nav__link">
|
||||
12.2. 全排列问题
|
||||
13.2. 全排列问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1836,7 +1917,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="subset_sum_problem/" class="md-nav__link">
|
||||
12.3. 子集和问题
|
||||
13.3. 子集和问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1850,7 +1931,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="n_queens_problem/" class="md-nav__link">
|
||||
12.4. N 皇后问题
|
||||
13.4. N 皇后问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1864,168 +1945,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="summary/" class="md-nav__link">
|
||||
12.5. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../chapter_dynamic_programming/">13. 动态规划</a>
|
||||
|
||||
<label for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
13. 动态规划
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_dynamic_programming/intro_to_dynamic_programming/" class="md-nav__link">
|
||||
13.1. 初探动态规划(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_dynamic_programming/dp_problem_features/" class="md-nav__link">
|
||||
13.2. DP 问题特性(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_dynamic_programming/dp_solution_pipeline/" class="md-nav__link">
|
||||
13.3. DP 解题思路(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_dynamic_programming/knapsack_problem/" class="md-nav__link">
|
||||
13.4. 0-1 背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_dynamic_programming/unbounded_knapsack_problem/" class="md-nav__link">
|
||||
13.5. 完全背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_dynamic_programming/edit_distance_problem/" class="md-nav__link">
|
||||
13.6. 编辑距离问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_dynamic_programming/summary/" class="md-nav__link">
|
||||
13.7. 小结(New)
|
||||
13.5. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2056,31 +1976,53 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_15" id="__nav_15_label" tabindex="0">
|
||||
14. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../chapter_dynamic_programming/">14. 动态规划</a>
|
||||
|
||||
<label for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_15_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
14. 附录
|
||||
14. 动态规划
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_appendix/installation/" class="md-nav__link">
|
||||
14.1. 编程环境安装
|
||||
<a href="../chapter_dynamic_programming/intro_to_dynamic_programming/" class="md-nav__link">
|
||||
14.1. 初探动态规划(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2093,8 +2035,78 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_appendix/contribution/" class="md-nav__link">
|
||||
14.2. 一起参与创作
|
||||
<a href="../chapter_dynamic_programming/dp_problem_features/" class="md-nav__link">
|
||||
14.2. DP 问题特性(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_dynamic_programming/dp_solution_pipeline/" class="md-nav__link">
|
||||
14.3. DP 解题思路(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_dynamic_programming/knapsack_problem/" class="md-nav__link">
|
||||
14.4. 0-1 背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_dynamic_programming/unbounded_knapsack_problem/" class="md-nav__link">
|
||||
14.5. 完全背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_dynamic_programming/edit_distance_problem/" class="md-nav__link">
|
||||
14.6. 编辑距离问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_dynamic_programming/summary/" class="md-nav__link">
|
||||
14.7. 小结(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2125,6 +2137,75 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_16" id="__nav_16_label" tabindex="0">
|
||||
15. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
15. 附录
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_appendix/installation/" class="md-nav__link">
|
||||
15.1. 编程环境安装
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../chapter_appendix/contribution/" class="md-nav__link">
|
||||
15.2. 一起参与创作
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_17" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2137,8 +2218,8 @@
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_17_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_17">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
参考文献
|
||||
</label>
|
||||
@ -2193,7 +2274,7 @@
|
||||
|
||||
|
||||
|
||||
<h1 id="12">12. 回溯<a class="headerlink" href="#12" title="Permanent link">¶</a></h1>
|
||||
<h1 id="13">13. 回溯<a class="headerlink" href="#13" title="Permanent link">¶</a></h1>
|
||||
<div class="center-table">
|
||||
<p><img alt="回溯" src="../assets/covers/chapter_backtracking.jpg" width="70%" /></p>
|
||||
</div>
|
||||
@ -2274,7 +2355,7 @@
|
||||
<nav class="md-footer__inner md-grid" aria-label="页脚" >
|
||||
|
||||
|
||||
<a href="../chapter_sorting/summary/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 11.11. &nbsp; 小结" rel="prev">
|
||||
<a href="../chapter_divide_and_conquer/build_binary_tree/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 12.2. &nbsp; 构建树问题(New)" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
@ -2283,20 +2364,20 @@
|
||||
上一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
11.11. 小结
|
||||
12.2. 构建树问题(New)
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="backtracking_algorithm/" class="md-footer__link md-footer__link--next" aria-label="下一页: 12.1. &nbsp; 回溯算法" rel="next">
|
||||
<a href="backtracking_algorithm/" class="md-footer__link md-footer__link--next" aria-label="下一页: 13.1. &nbsp; 回溯算法" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<span class="md-footer__direction">
|
||||
下一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
12.1. 回溯算法
|
||||
13.1. 回溯算法
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
|
@ -25,7 +25,7 @@
|
||||
|
||||
|
||||
|
||||
<title>12.4. N 皇后问题 - Hello 算法</title>
|
||||
<title>13.4. N 皇后问题 - Hello 算法</title>
|
||||
|
||||
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#124-n" class="md-skip">
|
||||
<a href="#134-n" class="md-skip">
|
||||
跳转至
|
||||
</a>
|
||||
|
||||
@ -113,7 +113,7 @@
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
12.4. N 皇后问题
|
||||
13.4. N 皇后问题
|
||||
|
||||
</span>
|
||||
</div>
|
||||
@ -1752,6 +1752,87 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_divide_and_conquer/">12. 分治</a>
|
||||
|
||||
<label for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 分治
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_divide_and_conquer/divide_and_conquer/" class="md-nav__link">
|
||||
12.1. 分治算法(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_divide_and_conquer/build_binary_tree/" class="md-nav__link">
|
||||
12.2. 构建树问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1761,7 +1842,7 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" checked>
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" checked>
|
||||
|
||||
|
||||
|
||||
@ -1784,18 +1865,18 @@
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../">12. 回溯</a>
|
||||
<a href="../">13. 回溯</a>
|
||||
|
||||
<label for="__nav_13">
|
||||
<label for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 回溯
|
||||
13. 回溯
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1808,7 +1889,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../backtracking_algorithm/" class="md-nav__link">
|
||||
12.1. 回溯算法
|
||||
13.1. 回溯算法
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1822,7 +1903,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../permutations_problem/" class="md-nav__link">
|
||||
12.2. 全排列问题
|
||||
13.2. 全排列问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1836,7 +1917,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../subset_sum_problem/" class="md-nav__link">
|
||||
12.3. 子集和问题
|
||||
13.3. 子集和问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1859,12 +1940,12 @@
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
||||
12.4. N 皇后问题
|
||||
13.4. N 皇后问题
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<a href="./" class="md-nav__link md-nav__link--active">
|
||||
12.4. N 皇后问题
|
||||
13.4. N 皇后问题
|
||||
</a>
|
||||
|
||||
|
||||
@ -1883,8 +1964,8 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1241" class="md-nav__link">
|
||||
12.4.1. 复杂度分析
|
||||
<a href="#1341" class="md-nav__link">
|
||||
13.4.1. 复杂度分析
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -1905,168 +1986,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../summary/" class="md-nav__link">
|
||||
12.5. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_dynamic_programming/">13. 动态规划</a>
|
||||
|
||||
<label for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
13. 动态规划
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/intro_to_dynamic_programming/" class="md-nav__link">
|
||||
13.1. 初探动态规划(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_problem_features/" class="md-nav__link">
|
||||
13.2. DP 问题特性(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_solution_pipeline/" class="md-nav__link">
|
||||
13.3. DP 解题思路(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/knapsack_problem/" class="md-nav__link">
|
||||
13.4. 0-1 背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/unbounded_knapsack_problem/" class="md-nav__link">
|
||||
13.5. 完全背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/edit_distance_problem/" class="md-nav__link">
|
||||
13.6. 编辑距离问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/summary/" class="md-nav__link">
|
||||
13.7. 小结(New)
|
||||
13.5. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2097,31 +2017,53 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_15" id="__nav_15_label" tabindex="0">
|
||||
14. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_dynamic_programming/">14. 动态规划</a>
|
||||
|
||||
<label for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_15_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
14. 附录
|
||||
14. 动态规划
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
14.1. 编程环境安装
|
||||
<a href="../../chapter_dynamic_programming/intro_to_dynamic_programming/" class="md-nav__link">
|
||||
14.1. 初探动态规划(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2134,8 +2076,78 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
14.2. 一起参与创作
|
||||
<a href="../../chapter_dynamic_programming/dp_problem_features/" class="md-nav__link">
|
||||
14.2. DP 问题特性(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_solution_pipeline/" class="md-nav__link">
|
||||
14.3. DP 解题思路(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/knapsack_problem/" class="md-nav__link">
|
||||
14.4. 0-1 背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/unbounded_knapsack_problem/" class="md-nav__link">
|
||||
14.5. 完全背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/edit_distance_problem/" class="md-nav__link">
|
||||
14.6. 编辑距离问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/summary/" class="md-nav__link">
|
||||
14.7. 小结(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2166,6 +2178,75 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_16" id="__nav_16_label" tabindex="0">
|
||||
15. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
15. 附录
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
15.1. 编程环境安装
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
15.2. 一起参与创作
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_17" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2178,8 +2259,8 @@
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_17_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_17">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
参考文献
|
||||
</label>
|
||||
@ -2220,8 +2301,8 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1241" class="md-nav__link">
|
||||
12.4.1. 复杂度分析
|
||||
<a href="#1341" class="md-nav__link">
|
||||
13.4.1. 复杂度分析
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -2249,7 +2330,7 @@
|
||||
|
||||
|
||||
|
||||
<h1 id="124-n">12.4. N 皇后问题<a class="headerlink" href="#124-n" title="Permanent link">¶</a></h1>
|
||||
<h1 id="134-n">13.4. N 皇后问题<a class="headerlink" href="#134-n" title="Permanent link">¶</a></h1>
|
||||
<div class="admonition question">
|
||||
<p class="admonition-title">Question</p>
|
||||
<p>根据国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。给定 <span class="arithmatex">\(n\)</span> 个皇后和一个 <span class="arithmatex">\(n \times n\)</span> 大小的棋盘,寻找使得所有皇后之间无法相互攻击的摆放方案。</p>
|
||||
@ -2711,7 +2792,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2 id="1241">12.4.1. 复杂度分析<a class="headerlink" href="#1241" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1341">13.4.1. 复杂度分析<a class="headerlink" href="#1341" title="Permanent link">¶</a></h2>
|
||||
<p>逐行放置 <span class="arithmatex">\(n\)</span> 次,考虑列约束,则从第一行到最后一行分别有 <span class="arithmatex">\(n, n-1, \cdots, 2, 1\)</span> 个选择,<strong>因此时间复杂度为 <span class="arithmatex">\(O(n!)\)</span></strong> 。实际上,根据对角线约束的剪枝也能够大幅地缩小搜索空间,因而搜索效率往往优于以上时间复杂度。</p>
|
||||
<p><code>state</code> 使用 <span class="arithmatex">\(O(n^2)\)</span> 空间,<code>cols</code> , <code>diags1</code> , <code>diags2</code> 皆使用 <span class="arithmatex">\(O(n)\)</span> 空间。最大递归深度为 <span class="arithmatex">\(n\)</span> ,使用 <span class="arithmatex">\(O(n)\)</span> 栈帧空间。因此,<strong>空间复杂度为 <span class="arithmatex">\(O(n^2)\)</span></strong> 。</p>
|
||||
|
||||
@ -2791,7 +2872,7 @@
|
||||
<nav class="md-footer__inner md-grid" aria-label="页脚" >
|
||||
|
||||
|
||||
<a href="../subset_sum_problem/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 12.3. &nbsp; 子集和问题" rel="prev">
|
||||
<a href="../subset_sum_problem/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 13.3. &nbsp; 子集和问题" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
@ -2800,20 +2881,20 @@
|
||||
上一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
12.3. 子集和问题
|
||||
13.3. 子集和问题
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="../summary/" class="md-footer__link md-footer__link--next" aria-label="下一页: 12.5. &nbsp; 小结" rel="next">
|
||||
<a href="../summary/" class="md-footer__link md-footer__link--next" aria-label="下一页: 13.5. &nbsp; 小结" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<span class="md-footer__direction">
|
||||
下一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
12.5. 小结
|
||||
13.5. 小结
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
|
@ -25,7 +25,7 @@
|
||||
|
||||
|
||||
|
||||
<title>12.2. 全排列问题 - Hello 算法</title>
|
||||
<title>13.2. 全排列问题 - Hello 算法</title>
|
||||
|
||||
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#122" class="md-skip">
|
||||
<a href="#132" class="md-skip">
|
||||
跳转至
|
||||
</a>
|
||||
|
||||
@ -113,7 +113,7 @@
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
12.2. 全排列问题
|
||||
13.2. 全排列问题
|
||||
|
||||
</span>
|
||||
</div>
|
||||
@ -1752,6 +1752,87 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_divide_and_conquer/">12. 分治</a>
|
||||
|
||||
<label for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 分治
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_divide_and_conquer/divide_and_conquer/" class="md-nav__link">
|
||||
12.1. 分治算法(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_divide_and_conquer/build_binary_tree/" class="md-nav__link">
|
||||
12.2. 构建树问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1761,7 +1842,7 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" checked>
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" checked>
|
||||
|
||||
|
||||
|
||||
@ -1784,18 +1865,18 @@
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../">12. 回溯</a>
|
||||
<a href="../">13. 回溯</a>
|
||||
|
||||
<label for="__nav_13">
|
||||
<label for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 回溯
|
||||
13. 回溯
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1808,7 +1889,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../backtracking_algorithm/" class="md-nav__link">
|
||||
12.1. 回溯算法
|
||||
13.1. 回溯算法
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1831,12 +1912,12 @@
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
||||
12.2. 全排列问题
|
||||
13.2. 全排列问题
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<a href="./" class="md-nav__link md-nav__link--active">
|
||||
12.2. 全排列问题
|
||||
13.2. 全排列问题
|
||||
</a>
|
||||
|
||||
|
||||
@ -1855,22 +1936,22 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1221" class="md-nav__link">
|
||||
12.2.1. 无重复的情况
|
||||
<a href="#1321" class="md-nav__link">
|
||||
13.2.1. 无重复的情况
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1222" class="md-nav__link">
|
||||
12.2.2. 考虑重复的情况
|
||||
<a href="#1322" class="md-nav__link">
|
||||
13.2.2. 考虑重复的情况
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1223" class="md-nav__link">
|
||||
12.2.3. 复杂度分析
|
||||
<a href="#1323" class="md-nav__link">
|
||||
13.2.3. 复杂度分析
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -1891,7 +1972,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../subset_sum_problem/" class="md-nav__link">
|
||||
12.3. 子集和问题
|
||||
13.3. 子集和问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1905,7 +1986,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../n_queens_problem/" class="md-nav__link">
|
||||
12.4. N 皇后问题
|
||||
13.4. N 皇后问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1919,168 +2000,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../summary/" class="md-nav__link">
|
||||
12.5. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_dynamic_programming/">13. 动态规划</a>
|
||||
|
||||
<label for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
13. 动态规划
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/intro_to_dynamic_programming/" class="md-nav__link">
|
||||
13.1. 初探动态规划(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_problem_features/" class="md-nav__link">
|
||||
13.2. DP 问题特性(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_solution_pipeline/" class="md-nav__link">
|
||||
13.3. DP 解题思路(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/knapsack_problem/" class="md-nav__link">
|
||||
13.4. 0-1 背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/unbounded_knapsack_problem/" class="md-nav__link">
|
||||
13.5. 完全背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/edit_distance_problem/" class="md-nav__link">
|
||||
13.6. 编辑距离问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/summary/" class="md-nav__link">
|
||||
13.7. 小结(New)
|
||||
13.5. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2111,31 +2031,53 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_15" id="__nav_15_label" tabindex="0">
|
||||
14. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_dynamic_programming/">14. 动态规划</a>
|
||||
|
||||
<label for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_15_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
14. 附录
|
||||
14. 动态规划
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
14.1. 编程环境安装
|
||||
<a href="../../chapter_dynamic_programming/intro_to_dynamic_programming/" class="md-nav__link">
|
||||
14.1. 初探动态规划(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2148,8 +2090,78 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
14.2. 一起参与创作
|
||||
<a href="../../chapter_dynamic_programming/dp_problem_features/" class="md-nav__link">
|
||||
14.2. DP 问题特性(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_solution_pipeline/" class="md-nav__link">
|
||||
14.3. DP 解题思路(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/knapsack_problem/" class="md-nav__link">
|
||||
14.4. 0-1 背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/unbounded_knapsack_problem/" class="md-nav__link">
|
||||
14.5. 完全背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/edit_distance_problem/" class="md-nav__link">
|
||||
14.6. 编辑距离问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/summary/" class="md-nav__link">
|
||||
14.7. 小结(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2180,6 +2192,75 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_16" id="__nav_16_label" tabindex="0">
|
||||
15. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
15. 附录
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
15.1. 编程环境安装
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
15.2. 一起参与创作
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_17" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2192,8 +2273,8 @@
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_17_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_17">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
参考文献
|
||||
</label>
|
||||
@ -2234,22 +2315,22 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1221" class="md-nav__link">
|
||||
12.2.1. 无重复的情况
|
||||
<a href="#1321" class="md-nav__link">
|
||||
13.2.1. 无重复的情况
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1222" class="md-nav__link">
|
||||
12.2.2. 考虑重复的情况
|
||||
<a href="#1322" class="md-nav__link">
|
||||
13.2.2. 考虑重复的情况
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1223" class="md-nav__link">
|
||||
12.2.3. 复杂度分析
|
||||
<a href="#1323" class="md-nav__link">
|
||||
13.2.3. 复杂度分析
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -2277,7 +2358,7 @@
|
||||
|
||||
|
||||
|
||||
<h1 id="122">12.2. 全排列问题<a class="headerlink" href="#122" title="Permanent link">¶</a></h1>
|
||||
<h1 id="132">13.2. 全排列问题<a class="headerlink" href="#132" title="Permanent link">¶</a></h1>
|
||||
<p>全排列问题是回溯算法的一个典型应用。它的定义是在给定一个集合(如一个数组或字符串)的情况下,找出这个集合中元素的所有可能的排列。</p>
|
||||
<p>下表列举了几个示例数据,包括输入数组和对应的所有排列。</p>
|
||||
<div class="center-table">
|
||||
@ -2304,7 +2385,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<h2 id="1221">12.2.1. 无重复的情况<a class="headerlink" href="#1221" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1321">13.2.1. 无重复的情况<a class="headerlink" href="#1321" title="Permanent link">¶</a></h2>
|
||||
<div class="admonition question">
|
||||
<p class="admonition-title">Question</p>
|
||||
<p>输入一个整数数组,数组中不包含重复元素,返回所有可能的排列。</p>
|
||||
@ -2611,7 +2692,7 @@
|
||||
<p><img alt="全排列剪枝示例" src="../permutations_problem.assets/permutations_i_pruning.png" /></p>
|
||||
<p align="center"> Fig. 全排列剪枝示例 </p>
|
||||
|
||||
<h2 id="1222">12.2.2. 考虑重复的情况<a class="headerlink" href="#1222" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1322">13.2.2. 考虑重复的情况<a class="headerlink" href="#1322" title="Permanent link">¶</a></h2>
|
||||
<div class="admonition question">
|
||||
<p class="admonition-title">Question</p>
|
||||
<p>输入一个整数数组,<strong>数组中可能包含重复元素</strong>,返回所有不重复的排列。</p>
|
||||
@ -2942,7 +3023,7 @@
|
||||
<p><img alt="两种剪枝条件的作用范围" src="../permutations_problem.assets/permutations_ii_pruning_summary.png" /></p>
|
||||
<p align="center"> Fig. 两种剪枝条件的作用范围 </p>
|
||||
|
||||
<h2 id="1223">12.2.3. 复杂度分析<a class="headerlink" href="#1223" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1323">13.2.3. 复杂度分析<a class="headerlink" href="#1323" title="Permanent link">¶</a></h2>
|
||||
<p>假设元素两两之间互不相同,则 <span class="arithmatex">\(n\)</span> 个元素共有 <span class="arithmatex">\(n!\)</span> 种排列(阶乘);在记录结果时,需要复制长度为 <span class="arithmatex">\(n\)</span> 的列表,使用 <span class="arithmatex">\(O(n)\)</span> 时间。因此,<strong>时间复杂度为 <span class="arithmatex">\(O(n!n)\)</span></strong> 。</p>
|
||||
<p>最大递归深度为 <span class="arithmatex">\(n\)</span> ,使用 <span class="arithmatex">\(O(n)\)</span> 栈帧空间。<code>selected</code> 使用 <span class="arithmatex">\(O(n)\)</span> 空间。同一时刻最多共有 <span class="arithmatex">\(n\)</span> 个 <code>duplicated</code> ,使用 <span class="arithmatex">\(O(n^2)\)</span> 空间。因此,<strong>全排列 I 的空间复杂度为 <span class="arithmatex">\(O(n)\)</span> ,全排列 II 的空间复杂度为 <span class="arithmatex">\(O(n^2)\)</span></strong> 。</p>
|
||||
|
||||
@ -3022,7 +3103,7 @@
|
||||
<nav class="md-footer__inner md-grid" aria-label="页脚" >
|
||||
|
||||
|
||||
<a href="../backtracking_algorithm/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 12.1. &nbsp; 回溯算法" rel="prev">
|
||||
<a href="../backtracking_algorithm/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 13.1. &nbsp; 回溯算法" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
@ -3031,20 +3112,20 @@
|
||||
上一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
12.1. 回溯算法
|
||||
13.1. 回溯算法
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="../subset_sum_problem/" class="md-footer__link md-footer__link--next" aria-label="下一页: 12.3. &nbsp; 子集和问题" rel="next">
|
||||
<a href="../subset_sum_problem/" class="md-footer__link md-footer__link--next" aria-label="下一页: 13.3. &nbsp; 子集和问题" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<span class="md-footer__direction">
|
||||
下一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
12.3. 子集和问题
|
||||
13.3. 子集和问题
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
|
@ -25,7 +25,7 @@
|
||||
|
||||
|
||||
|
||||
<title>12.3. 子集和问题 - Hello 算法</title>
|
||||
<title>13.3. 子集和问题 - Hello 算法</title>
|
||||
|
||||
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#123" class="md-skip">
|
||||
<a href="#133" class="md-skip">
|
||||
跳转至
|
||||
</a>
|
||||
|
||||
@ -113,7 +113,7 @@
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
12.3. 子集和问题
|
||||
13.3. 子集和问题
|
||||
|
||||
</span>
|
||||
</div>
|
||||
@ -1752,6 +1752,87 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_divide_and_conquer/">12. 分治</a>
|
||||
|
||||
<label for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 分治
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_divide_and_conquer/divide_and_conquer/" class="md-nav__link">
|
||||
12.1. 分治算法(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_divide_and_conquer/build_binary_tree/" class="md-nav__link">
|
||||
12.2. 构建树问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1761,7 +1842,7 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" checked>
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" checked>
|
||||
|
||||
|
||||
|
||||
@ -1784,18 +1865,18 @@
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../">12. 回溯</a>
|
||||
<a href="../">13. 回溯</a>
|
||||
|
||||
<label for="__nav_13">
|
||||
<label for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 回溯
|
||||
13. 回溯
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1808,7 +1889,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../backtracking_algorithm/" class="md-nav__link">
|
||||
12.1. 回溯算法
|
||||
13.1. 回溯算法
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1822,7 +1903,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../permutations_problem/" class="md-nav__link">
|
||||
12.2. 全排列问题
|
||||
13.2. 全排列问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1845,12 +1926,12 @@
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
||||
12.3. 子集和问题
|
||||
13.3. 子集和问题
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<a href="./" class="md-nav__link md-nav__link--active">
|
||||
12.3. 子集和问题
|
||||
13.3. 子集和问题
|
||||
</a>
|
||||
|
||||
|
||||
@ -1869,22 +1950,22 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1231" class="md-nav__link">
|
||||
12.3.1. 从全排列引出解法
|
||||
<a href="#1331" class="md-nav__link">
|
||||
13.3.1. 从全排列引出解法
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1232" class="md-nav__link">
|
||||
12.3.2. 重复子集剪枝
|
||||
<a href="#1332" class="md-nav__link">
|
||||
13.3.2. 重复子集剪枝
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1233" class="md-nav__link">
|
||||
12.3.3. 相等元素剪枝
|
||||
<a href="#1333" class="md-nav__link">
|
||||
13.3.3. 相等元素剪枝
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -1905,7 +1986,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../n_queens_problem/" class="md-nav__link">
|
||||
12.4. N 皇后问题
|
||||
13.4. N 皇后问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1919,168 +2000,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../summary/" class="md-nav__link">
|
||||
12.5. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_dynamic_programming/">13. 动态规划</a>
|
||||
|
||||
<label for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
13. 动态规划
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/intro_to_dynamic_programming/" class="md-nav__link">
|
||||
13.1. 初探动态规划(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_problem_features/" class="md-nav__link">
|
||||
13.2. DP 问题特性(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_solution_pipeline/" class="md-nav__link">
|
||||
13.3. DP 解题思路(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/knapsack_problem/" class="md-nav__link">
|
||||
13.4. 0-1 背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/unbounded_knapsack_problem/" class="md-nav__link">
|
||||
13.5. 完全背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/edit_distance_problem/" class="md-nav__link">
|
||||
13.6. 编辑距离问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/summary/" class="md-nav__link">
|
||||
13.7. 小结(New)
|
||||
13.5. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2111,31 +2031,53 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_15" id="__nav_15_label" tabindex="0">
|
||||
14. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_dynamic_programming/">14. 动态规划</a>
|
||||
|
||||
<label for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_15_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
14. 附录
|
||||
14. 动态规划
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
14.1. 编程环境安装
|
||||
<a href="../../chapter_dynamic_programming/intro_to_dynamic_programming/" class="md-nav__link">
|
||||
14.1. 初探动态规划(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2148,8 +2090,78 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
14.2. 一起参与创作
|
||||
<a href="../../chapter_dynamic_programming/dp_problem_features/" class="md-nav__link">
|
||||
14.2. DP 问题特性(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_solution_pipeline/" class="md-nav__link">
|
||||
14.3. DP 解题思路(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/knapsack_problem/" class="md-nav__link">
|
||||
14.4. 0-1 背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/unbounded_knapsack_problem/" class="md-nav__link">
|
||||
14.5. 完全背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/edit_distance_problem/" class="md-nav__link">
|
||||
14.6. 编辑距离问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/summary/" class="md-nav__link">
|
||||
14.7. 小结(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2180,6 +2192,75 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_16" id="__nav_16_label" tabindex="0">
|
||||
15. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
15. 附录
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
15.1. 编程环境安装
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
15.2. 一起参与创作
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_17" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2192,8 +2273,8 @@
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_17_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_17">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
参考文献
|
||||
</label>
|
||||
@ -2234,22 +2315,22 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1231" class="md-nav__link">
|
||||
12.3.1. 从全排列引出解法
|
||||
<a href="#1331" class="md-nav__link">
|
||||
13.3.1. 从全排列引出解法
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1232" class="md-nav__link">
|
||||
12.3.2. 重复子集剪枝
|
||||
<a href="#1332" class="md-nav__link">
|
||||
13.3.2. 重复子集剪枝
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#1233" class="md-nav__link">
|
||||
12.3.3. 相等元素剪枝
|
||||
<a href="#1333" class="md-nav__link">
|
||||
13.3.3. 相等元素剪枝
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -2277,13 +2358,13 @@
|
||||
|
||||
|
||||
|
||||
<h1 id="123">12.3. 子集和问题<a class="headerlink" href="#123" title="Permanent link">¶</a></h1>
|
||||
<h1 id="133">13.3. 子集和问题<a class="headerlink" href="#133" title="Permanent link">¶</a></h1>
|
||||
<div class="admonition question">
|
||||
<p class="admonition-title">Question</p>
|
||||
<p>给定一个正整数数组 <code>nums</code> 和一个目标正整数 <code>target</code> ,请找出所有可能的组合,使得组合中的元素和等于 <code>target</code> 。给定数组无重复元素,每个元素可以被选取多次。请以列表形式返回这些组合,列表中不应包含重复组合。</p>
|
||||
</div>
|
||||
<p>例如,输入集合 <span class="arithmatex">\(\{3, 4, 5\}\)</span> 和目标整数 <span class="arithmatex">\(9\)</span> ,由于集合中的数字可以被重复选取,因此解为 <span class="arithmatex">\(\{3, 3, 3\}, \{4, 5\}\)</span> 。请注意,子集是不区分元素顺序的,例如 <span class="arithmatex">\(\{4, 5\}\)</span> 和 <span class="arithmatex">\(\{5, 4\}\)</span> 是同一个子集。</p>
|
||||
<h2 id="1231">12.3.1. 从全排列引出解法<a class="headerlink" href="#1231" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1331">13.3.1. 从全排列引出解法<a class="headerlink" href="#1331" title="Permanent link">¶</a></h2>
|
||||
<p>类似于上节全排列问题的解法,我们可以把子集的生成过程想象成一系列选择的结果,并在选择过程中实时更新“元素和”,当元素和等于 <code>target</code> 时,就将子集记录至结果列表。</p>
|
||||
<p>而与全排列问题不同的是,本题允许重复选取同一元素,因此无需借助 <code>selected</code> 布尔列表来记录元素是否已被选择。我们可以对全排列代码进行小幅修改,初步得到解题代码。</p>
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="1:11"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><input id="__tabbed_1_8" name="__tabbed_1" type="radio" /><input id="__tabbed_1_9" name="__tabbed_1" type="radio" /><input id="__tabbed_1_10" name="__tabbed_1" type="radio" /><input id="__tabbed_1_11" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Java</label><label for="__tabbed_1_2">C++</label><label for="__tabbed_1_3">Python</label><label for="__tabbed_1_4">Go</label><label for="__tabbed_1_5">JavaScript</label><label for="__tabbed_1_6">TypeScript</label><label for="__tabbed_1_7">C</label><label for="__tabbed_1_8">C#</label><label for="__tabbed_1_9">Swift</label><label for="__tabbed_1_10">Zig</label><label for="__tabbed_1_11">Dart</label></div>
|
||||
@ -2524,7 +2605,7 @@
|
||||
<p><img alt="子集搜索与越界剪枝" src="../subset_sum_problem.assets/subset_sum_i_naive.png" /></p>
|
||||
<p align="center"> Fig. 子集搜索与越界剪枝 </p>
|
||||
|
||||
<h2 id="1232">12.3.2. 重复子集剪枝<a class="headerlink" href="#1232" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1332">13.3.2. 重复子集剪枝<a class="headerlink" href="#1332" title="Permanent link">¶</a></h2>
|
||||
<p>为了去除重复子集,<strong>一种直接的思路是对结果列表进行去重</strong>。但这个方法效率很低,因为:</p>
|
||||
<ul>
|
||||
<li>当数组元素较多,尤其是当 <code>target</code> 较大时,搜索过程会产生大量的重复子集。</li>
|
||||
@ -2794,7 +2875,7 @@
|
||||
<p><img alt="子集和 I 回溯过程" src="../subset_sum_problem.assets/subset_sum_i.png" /></p>
|
||||
<p align="center"> Fig. 子集和 I 回溯过程 </p>
|
||||
|
||||
<h2 id="1233">12.3.3. 相等元素剪枝<a class="headerlink" href="#1233" title="Permanent link">¶</a></h2>
|
||||
<h2 id="1333">13.3.3. 相等元素剪枝<a class="headerlink" href="#1333" title="Permanent link">¶</a></h2>
|
||||
<div class="admonition question">
|
||||
<p class="admonition-title">Question</p>
|
||||
<p>给定一个正整数数组 <code>nums</code> 和一个目标正整数 <code>target</code> ,请找出所有可能的组合,使得组合中的元素和等于 <code>target</code> 。<strong>给定数组可能包含重复元素,每个元素只可被选择一次</strong>。请以列表形式返回这些组合,列表中不应包含重复组合。</p>
|
||||
@ -3162,7 +3243,7 @@
|
||||
<nav class="md-footer__inner md-grid" aria-label="页脚" >
|
||||
|
||||
|
||||
<a href="../permutations_problem/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 12.2. &nbsp; 全排列问题" rel="prev">
|
||||
<a href="../permutations_problem/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 13.2. &nbsp; 全排列问题" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
@ -3171,20 +3252,20 @@
|
||||
上一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
12.2. 全排列问题
|
||||
13.2. 全排列问题
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="../n_queens_problem/" class="md-footer__link md-footer__link--next" aria-label="下一页: 12.4. &nbsp; N 皇后问题" rel="next">
|
||||
<a href="../n_queens_problem/" class="md-footer__link md-footer__link--next" aria-label="下一页: 13.4. &nbsp; N 皇后问题" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<span class="md-footer__direction">
|
||||
下一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
12.4. N 皇后问题
|
||||
13.4. N 皇后问题
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
|
@ -25,7 +25,7 @@
|
||||
|
||||
|
||||
|
||||
<title>12.5. 小结 - Hello 算法</title>
|
||||
<title>13.5. 小结 - Hello 算法</title>
|
||||
|
||||
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#125" class="md-skip">
|
||||
<a href="#135" class="md-skip">
|
||||
跳转至
|
||||
</a>
|
||||
|
||||
@ -113,7 +113,7 @@
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
12.5. 小结
|
||||
13.5. 小结
|
||||
|
||||
</span>
|
||||
</div>
|
||||
@ -1752,6 +1752,87 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_divide_and_conquer/">12. 分治</a>
|
||||
|
||||
<label for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 分治
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_divide_and_conquer/divide_and_conquer/" class="md-nav__link">
|
||||
12.1. 分治算法(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_divide_and_conquer/build_binary_tree/" class="md-nav__link">
|
||||
12.2. 构建树问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1761,7 +1842,7 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" checked>
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" checked>
|
||||
|
||||
|
||||
|
||||
@ -1784,18 +1865,18 @@
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../">12. 回溯</a>
|
||||
<a href="../">13. 回溯</a>
|
||||
|
||||
<label for="__nav_13">
|
||||
<label for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 回溯
|
||||
13. 回溯
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1808,7 +1889,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../backtracking_algorithm/" class="md-nav__link">
|
||||
12.1. 回溯算法
|
||||
13.1. 回溯算法
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1822,7 +1903,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../permutations_problem/" class="md-nav__link">
|
||||
12.2. 全排列问题
|
||||
13.2. 全排列问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1836,7 +1917,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../subset_sum_problem/" class="md-nav__link">
|
||||
12.3. 子集和问题
|
||||
13.3. 子集和问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1850,7 +1931,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../n_queens_problem/" class="md-nav__link">
|
||||
12.4. N 皇后问题
|
||||
13.4. N 皇后问题
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1873,7 +1954,7 @@
|
||||
|
||||
|
||||
<a href="./" class="md-nav__link md-nav__link--active">
|
||||
12.5. 小结
|
||||
13.5. 小结
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -1895,167 +1976,6 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_dynamic_programming/">13. 动态规划</a>
|
||||
|
||||
<label for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
13. 动态规划
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/intro_to_dynamic_programming/" class="md-nav__link">
|
||||
13.1. 初探动态规划(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_problem_features/" class="md-nav__link">
|
||||
13.2. DP 问题特性(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_solution_pipeline/" class="md-nav__link">
|
||||
13.3. DP 解题思路(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/knapsack_problem/" class="md-nav__link">
|
||||
13.4. 0-1 背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/unbounded_knapsack_problem/" class="md-nav__link">
|
||||
13.5. 完全背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/edit_distance_problem/" class="md-nav__link">
|
||||
13.6. 编辑距离问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/summary/" class="md-nav__link">
|
||||
13.7. 小结(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
@ -2066,31 +1986,53 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_15" id="__nav_15_label" tabindex="0">
|
||||
14. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
|
||||
<div class="md-nav__link md-nav__link--index ">
|
||||
<a href="../../chapter_dynamic_programming/">14. 动态规划</a>
|
||||
|
||||
<label for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_15_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
14. 附录
|
||||
14. 动态规划
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
14.1. 编程环境安装
|
||||
<a href="../../chapter_dynamic_programming/intro_to_dynamic_programming/" class="md-nav__link">
|
||||
14.1. 初探动态规划(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2103,8 +2045,78 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
14.2. 一起参与创作
|
||||
<a href="../../chapter_dynamic_programming/dp_problem_features/" class="md-nav__link">
|
||||
14.2. DP 问题特性(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/dp_solution_pipeline/" class="md-nav__link">
|
||||
14.3. DP 解题思路(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/knapsack_problem/" class="md-nav__link">
|
||||
14.4. 0-1 背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/unbounded_knapsack_problem/" class="md-nav__link">
|
||||
14.5. 完全背包问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/edit_distance_problem/" class="md-nav__link">
|
||||
14.6. 编辑距离问题(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_dynamic_programming/summary/" class="md-nav__link">
|
||||
14.7. 小结(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -2135,6 +2147,75 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_16" id="__nav_16_label" tabindex="0">
|
||||
15. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
15. 附录
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
15.1. 编程环境安装
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
15.2. 一起参与创作
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_17" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2147,8 +2228,8 @@
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_17_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_17">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
参考文献
|
||||
</label>
|
||||
@ -2203,7 +2284,7 @@
|
||||
|
||||
|
||||
|
||||
<h1 id="125">12.5. 小结<a class="headerlink" href="#125" title="Permanent link">¶</a></h1>
|
||||
<h1 id="135">13.5. 小结<a class="headerlink" href="#135" title="Permanent link">¶</a></h1>
|
||||
<ul>
|
||||
<li>回溯算法本质是穷举法,通过对解空间进行深度优先遍历来寻找符合条件的解。在搜索过程中,遇到满足条件的解则记录,直至找到所有解或遍历完成后结束。</li>
|
||||
<li>回溯算法的搜索过程包括尝试与回退两个部分。它通过深度优先搜索来尝试各种选择,当遇到不满足约束条件的情况时,则撤销上一步的选择,退回到之前的状态,并继续尝试其他选择。尝试与回退是两个方向相反的操作。</li>
|
||||
@ -2293,7 +2374,7 @@
|
||||
<nav class="md-footer__inner md-grid" aria-label="页脚" >
|
||||
|
||||
|
||||
<a href="../n_queens_problem/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 12.4. &nbsp; N 皇后问题" rel="prev">
|
||||
<a href="../n_queens_problem/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 13.4. &nbsp; N 皇后问题" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
@ -2302,20 +2383,20 @@
|
||||
上一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
12.4. N 皇后问题
|
||||
13.4. N 皇后问题
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="../../chapter_dynamic_programming/" class="md-footer__link md-footer__link--next" aria-label="下一页: 13. &nbsp; 动态规划" rel="next">
|
||||
<a href="../../chapter_dynamic_programming/" class="md-footer__link md-footer__link--next" aria-label="下一页: 14. &nbsp; 动态规划" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<span class="md-footer__direction">
|
||||
下一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
13. 动态规划
|
||||
14. 动态规划
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
|
Reference in New Issue
Block a user