This commit is contained in:
krahets
2023-09-22 13:08:10 +08:00
parent 5bb9f76fbc
commit 6fffa33695
107 changed files with 2561 additions and 19178 deletions

View File

@@ -60,7 +60,18 @@
</head>
<link href="../../assets/stylesheets/glightbox.min.css" rel="stylesheet"/><style>
html.glightbox-open { overflow: initial; height: 100%; }
.gslide-title { margin-top: 0px; user-select: text; }
.gslide-desc { color: #666; user-select: text; }
.gslide-image img { background: white; }
.gscrollbar-fixer { padding-right: 15px; }
.gdesc-inner { font-size: 0.75rem; }
body[data-md-color-scheme="slate"] .gdesc-inner { background: var(--md-default-bg-color);}
body[data-md-color-scheme="slate"] .gslide-title { color: var(--md-default-fg-color);}
body[data-md-color-scheme="slate"] .gslide-desc { color: var(--md-default-fg-color);}
</style> <script src="../../assets/javascripts/glightbox.min.js"></script></head>
@@ -1971,14 +1982,6 @@
10.2 &nbsp; 二分查找插入点
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -1999,14 +2002,6 @@
10.3 &nbsp; 二分查找边界
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -2426,14 +2421,6 @@
第 12 章 &nbsp; 分治
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
@@ -2465,14 +2452,6 @@
12.1 &nbsp; 分治算法
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -2493,14 +2472,6 @@
12.2 &nbsp; 分治搜索策略
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -2521,14 +2492,6 @@
12.3 &nbsp; 构建树问题
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -2549,14 +2512,6 @@
12.4 &nbsp; 汉诺塔问题
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -2577,14 +2532,6 @@
12.5 &nbsp; 小结
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -2816,14 +2763,6 @@
第 14 章 &nbsp; 动态规划
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
@@ -2855,14 +2794,6 @@
14.1 &nbsp; 初探动态规划
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -2883,14 +2814,6 @@
14.2 &nbsp; DP 问题特性
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -2911,14 +2834,6 @@
14.3 &nbsp; DP 解题思路
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -2939,14 +2854,6 @@
14.4 &nbsp; 0-1 背包问题
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -2967,14 +2874,6 @@
14.5 &nbsp; 完全背包问题
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -2995,14 +2894,6 @@
14.6 &nbsp; 编辑距离问题
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -3023,14 +2914,6 @@
14.7 &nbsp; 小结
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -3089,14 +2972,6 @@
第 15 章 &nbsp; 贪心
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
@@ -3128,14 +3003,6 @@
15.1 &nbsp; 贪心算法
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -3156,14 +3023,6 @@
15.2 &nbsp; 分数背包问题
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -3184,14 +3043,6 @@
15.3 &nbsp; 最大容量问题
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -3212,14 +3063,6 @@
15.4 &nbsp; 最大切分乘积问题
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -3240,14 +3083,6 @@
15.5 &nbsp; 小结
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -3558,7 +3393,7 @@
<p>图和树都都需要应用搜索算法来实现遍历操作。图的遍历方式可分为两种:「广度优先遍历 breadth-first traversal」和「深度优先遍历 depth-first traversal」。它们也常被称为「广度优先搜索 breadth-first search」和「深度优先搜索 depth-first search」简称 BFS 和 DFS 。</p>
<h2 id="931">9.3.1 &nbsp; 广度优先遍历<a class="headerlink" href="#931" title="Permanent link">&para;</a></h2>
<p><strong>广度优先遍历是一种由近及远的遍历方式,从某个节点出发,始终优先访问距离最近的顶点,并一层层向外扩张</strong>。如图 9-9 所示,从左上角顶点出发,先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻接顶点,以此类推,直至所有顶点访问完毕。</p>
<p><img alt="图的广度优先遍历" src="../graph_traversal.assets/graph_bfs.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_bfs.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="图的广度优先遍历" src="../graph_traversal.assets/graph_bfs.png" /></a></p>
<p align="center"> 图 9-9 &nbsp; 图的广度优先遍历 </p>
<h3 id="1">1. &nbsp; 算法实现<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3>
@@ -3915,37 +3750,37 @@
<div class="tabbed-set tabbed-alternate" data-tabs="2:11"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><input id="__tabbed_2_4" name="__tabbed_2" type="radio" /><input id="__tabbed_2_5" name="__tabbed_2" type="radio" /><input id="__tabbed_2_6" name="__tabbed_2" type="radio" /><input id="__tabbed_2_7" name="__tabbed_2" type="radio" /><input id="__tabbed_2_8" name="__tabbed_2" type="radio" /><input id="__tabbed_2_9" name="__tabbed_2" type="radio" /><input id="__tabbed_2_10" name="__tabbed_2" type="radio" /><input id="__tabbed_2_11" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">&lt;1&gt;</label><label for="__tabbed_2_2">&lt;2&gt;</label><label for="__tabbed_2_3">&lt;3&gt;</label><label for="__tabbed_2_4">&lt;4&gt;</label><label for="__tabbed_2_5">&lt;5&gt;</label><label for="__tabbed_2_6">&lt;6&gt;</label><label for="__tabbed_2_7">&lt;7&gt;</label><label for="__tabbed_2_8">&lt;8&gt;</label><label for="__tabbed_2_9">&lt;9&gt;</label><label for="__tabbed_2_10">&lt;10&gt;</label><label for="__tabbed_2_11">&lt;11&gt;</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<p><img alt="图的广度优先遍历步骤" src="../graph_traversal.assets/graph_bfs_step1.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_bfs_step1.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="图的广度优先遍历步骤" src="../graph_traversal.assets/graph_bfs_step1.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_bfs_step2" src="../graph_traversal.assets/graph_bfs_step2.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_bfs_step2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_bfs_step2" src="../graph_traversal.assets/graph_bfs_step2.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_bfs_step3" src="../graph_traversal.assets/graph_bfs_step3.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_bfs_step3.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_bfs_step3" src="../graph_traversal.assets/graph_bfs_step3.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_bfs_step4" src="../graph_traversal.assets/graph_bfs_step4.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_bfs_step4.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_bfs_step4" src="../graph_traversal.assets/graph_bfs_step4.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_bfs_step5" src="../graph_traversal.assets/graph_bfs_step5.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_bfs_step5.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_bfs_step5" src="../graph_traversal.assets/graph_bfs_step5.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_bfs_step6" src="../graph_traversal.assets/graph_bfs_step6.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_bfs_step6.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_bfs_step6" src="../graph_traversal.assets/graph_bfs_step6.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_bfs_step7" src="../graph_traversal.assets/graph_bfs_step7.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_bfs_step7.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_bfs_step7" src="../graph_traversal.assets/graph_bfs_step7.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_bfs_step8" src="../graph_traversal.assets/graph_bfs_step8.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_bfs_step8.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_bfs_step8" src="../graph_traversal.assets/graph_bfs_step8.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_bfs_step9" src="../graph_traversal.assets/graph_bfs_step9.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_bfs_step9.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_bfs_step9" src="../graph_traversal.assets/graph_bfs_step9.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_bfs_step10" src="../graph_traversal.assets/graph_bfs_step10.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_bfs_step10.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_bfs_step10" src="../graph_traversal.assets/graph_bfs_step10.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_bfs_step11" src="../graph_traversal.assets/graph_bfs_step11.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_bfs_step11.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_bfs_step11" src="../graph_traversal.assets/graph_bfs_step11.png" /></a></p>
</div>
</div>
</div>
@@ -3960,7 +3795,7 @@
<p><strong>空间复杂度:</strong> 列表 <code>res</code> ,哈希表 <code>visited</code> ,队列 <code>que</code> 中的顶点数量最多为 <span class="arithmatex">\(|V|\)</span> ,使用 <span class="arithmatex">\(O(|V|)\)</span> 空间。</p>
<h2 id="932">9.3.2 &nbsp; 深度优先遍历<a class="headerlink" href="#932" title="Permanent link">&para;</a></h2>
<p><strong>深度优先遍历是一种优先走到底、无路可走再回头的遍历方式</strong>。如图 9-11 所示,从左上角顶点出发,访问当前顶点的某个邻接顶点,直到走到尽头时返回,再继续走到尽头并返回,以此类推,直至所有顶点遍历完成。</p>
<p><img alt="图的深度优先遍历" src="../graph_traversal.assets/graph_dfs.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_dfs.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="图的深度优先遍历" src="../graph_traversal.assets/graph_dfs.png" /></a></p>
<p align="center"> 图 9-11 &nbsp; 图的深度优先遍历 </p>
<h3 id="1_1">1. &nbsp; 算法实现<a class="headerlink" href="#1_1" title="Permanent link">&para;</a></h3>
@@ -4300,37 +4135,37 @@
<div class="tabbed-set tabbed-alternate" data-tabs="4:11"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><input id="__tabbed_4_3" name="__tabbed_4" type="radio" /><input id="__tabbed_4_4" name="__tabbed_4" type="radio" /><input id="__tabbed_4_5" name="__tabbed_4" type="radio" /><input id="__tabbed_4_6" name="__tabbed_4" type="radio" /><input id="__tabbed_4_7" name="__tabbed_4" type="radio" /><input id="__tabbed_4_8" name="__tabbed_4" type="radio" /><input id="__tabbed_4_9" name="__tabbed_4" type="radio" /><input id="__tabbed_4_10" name="__tabbed_4" type="radio" /><input id="__tabbed_4_11" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">&lt;1&gt;</label><label for="__tabbed_4_2">&lt;2&gt;</label><label for="__tabbed_4_3">&lt;3&gt;</label><label for="__tabbed_4_4">&lt;4&gt;</label><label for="__tabbed_4_5">&lt;5&gt;</label><label for="__tabbed_4_6">&lt;6&gt;</label><label for="__tabbed_4_7">&lt;7&gt;</label><label for="__tabbed_4_8">&lt;8&gt;</label><label for="__tabbed_4_9">&lt;9&gt;</label><label for="__tabbed_4_10">&lt;10&gt;</label><label for="__tabbed_4_11">&lt;11&gt;</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<p><img alt="图的深度优先遍历步骤" src="../graph_traversal.assets/graph_dfs_step1.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_dfs_step1.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="图的深度优先遍历步骤" src="../graph_traversal.assets/graph_dfs_step1.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_dfs_step2" src="../graph_traversal.assets/graph_dfs_step2.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_dfs_step2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_dfs_step2" src="../graph_traversal.assets/graph_dfs_step2.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_dfs_step3" src="../graph_traversal.assets/graph_dfs_step3.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_dfs_step3.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_dfs_step3" src="../graph_traversal.assets/graph_dfs_step3.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_dfs_step4" src="../graph_traversal.assets/graph_dfs_step4.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_dfs_step4.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_dfs_step4" src="../graph_traversal.assets/graph_dfs_step4.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_dfs_step5" src="../graph_traversal.assets/graph_dfs_step5.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_dfs_step5.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_dfs_step5" src="../graph_traversal.assets/graph_dfs_step5.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_dfs_step6" src="../graph_traversal.assets/graph_dfs_step6.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_dfs_step6.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_dfs_step6" src="../graph_traversal.assets/graph_dfs_step6.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_dfs_step7" src="../graph_traversal.assets/graph_dfs_step7.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_dfs_step7.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_dfs_step7" src="../graph_traversal.assets/graph_dfs_step7.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_dfs_step8" src="../graph_traversal.assets/graph_dfs_step8.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_dfs_step8.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_dfs_step8" src="../graph_traversal.assets/graph_dfs_step8.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_dfs_step9" src="../graph_traversal.assets/graph_dfs_step9.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_dfs_step9.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_dfs_step9" src="../graph_traversal.assets/graph_dfs_step9.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_dfs_step10" src="../graph_traversal.assets/graph_dfs_step10.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_dfs_step10.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_dfs_step10" src="../graph_traversal.assets/graph_dfs_step10.png" /></a></p>
</div>
<div class="tabbed-block">
<p><img alt="graph_dfs_step11" src="../graph_traversal.assets/graph_dfs_step11.png" /></p>
<p><a class="glightbox" href="../graph_traversal.assets/graph_dfs_step11.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="graph_dfs_step11" src="../graph_traversal.assets/graph_dfs_step11.png" /></a></p>
</div>
</div>
</div>
@@ -4507,10 +4342,15 @@ aria-label="页脚"
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright &copy; 2023 Krahets
Copyright &copy; 2022 - 2023 Krahets
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<!-- Social links -->
@@ -4579,5 +4419,5 @@ aria-label="页脚"
</body>
<script>document$.subscribe(() => {const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": false, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "none"});})</script></body>
</html>