This commit is contained in:
krahets
2023-08-29 20:57:26 +08:00
parent 6ae6c480e0
commit 8c4d24795c
32 changed files with 574 additions and 278 deletions

View File

@ -2662,6 +2662,17 @@
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
13.5 &nbsp; 小结
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
@ -2672,6 +2683,39 @@
</a>
<nav class="md-nav md-nav--secondary" aria-label="目录">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
目录
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#1" class="md-nav__link">
1. &nbsp; 重点回顾
</a>
</li>
<li class="md-nav__item">
<a href="#2-q-a" class="md-nav__link">
2. &nbsp; Q &amp; A
</a>
</li>
</ul>
</nav>
</li>
@ -3354,6 +3398,28 @@
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
目录
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#1" class="md-nav__link">
1. &nbsp; 重点回顾
</a>
</li>
<li class="md-nav__item">
<a href="#2-q-a" class="md-nav__link">
2. &nbsp; Q &amp; A
</a>
</li>
</ul>
</nav>
</div>
</div>
@ -3376,6 +3442,7 @@
<h1 id="135">13.5 &nbsp; 小结<a class="headerlink" href="#135" title="Permanent link">&para;</a></h1>
<h3 id="1">1. &nbsp; 重点回顾<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3>
<ul>
<li>回溯算法本质是穷举法,通过对解空间进行深度优先遍历来寻找符合条件的解。在搜索过程中,遇到满足条件的解则记录,直至找到所有解或遍历完成后结束。</li>
<li>回溯算法的搜索过程包括尝试与回退两个部分。它通过深度优先搜索来尝试各种选择,当遇到不满足约束条件的情况时,则撤销上一步的选择,退回到之前的状态,并继续尝试其他选择。尝试与回退是两个方向相反的操作。</li>
@ -3388,6 +3455,15 @@
<li><span class="arithmatex">\(n\)</span> 皇后旨在寻找将 <span class="arithmatex">\(n\)</span> 个皇后放置到 <span class="arithmatex">\(n \times n\)</span> 尺寸棋盘上的方案,要求所有皇后两两之间无法攻击对方。该问题的约束条件有行约束、列约束、主对角线和副对角线约束。为满足行约束,我们采用按行放置的策略,保证每一行放置一个皇后。</li>
<li>列约束和对角线约束的处理方式类似。对于列约束,我们利用一个数组来记录每一列是否有皇后,从而指示选中的格子是否合法。对于对角线约束,我们借助两个数组来分别记录该主、副对角线是否存在皇后;难点在于找处在到同一主(副)对角线上格子满足的行列索引规律。</li>
</ul>
<h3 id="2-q-a">2. &nbsp; Q &amp; A<a class="headerlink" href="#2-q-a" title="Permanent link">&para;</a></h3>
<div class="admonition question">
<p class="admonition-title">怎么理解回溯和递归的关系?</p>
<p>总的来看,回溯是一种“算法策略”,而递归更像是一个“工具”。</p>
<ul>
<li>回溯算法通常基于递归实现。然而,回溯是递归的应用场景之一,是递归在搜索问题中的应用。</li>
<li>递归的结构体现了“子问题分解”的解题范式,常用于解决分治、回溯、动态规划(记忆化递归)等问题。</li>
</ul>
</div>