This commit is contained in:
krahets
2023-07-26 08:59:03 +08:00
parent fd34c845bc
commit 974fea7de4
48 changed files with 299 additions and 299 deletions
@@ -3438,8 +3438,8 @@
<h1 id="121">12.1. &nbsp; 分治算法<a class="headerlink" href="#121" title="Permanent link">&para;</a></h1>
<p>「分治 Divide and Conquer」,全称分而治之,是一种非常重要且常见的算法策略。分治通常基于递归实现,包括“分”和“治”两步:</p>
<ol>
<li><strong>分(划分阶段)</strong>:递归地将原问题分解为两个或多个子问题,直至到达最小子问题时终止</li>
<li><strong>治(合并阶段)</strong>:从已知解的最小子问题开始,从底至顶地将子问题的解进行合并,从而构建出原问题的解</li>
<li><strong>分(划分阶段)</strong>:递归地将原问题分解为两个或多个子问题,直至到达最小子问题时终止</li>
<li><strong>治(合并阶段)</strong>:从已知解的最小子问题开始,从底至顶地将子问题的解进行合并,从而构建出原问题的解</li>
</ol>
<p>已介绍过的「归并排序」是分治策略的典型应用之一,它的分治策略为:</p>
<ol>
@@ -3458,9 +3458,9 @@
</ol>
<p>显然归并排序,满足以上三条判断依据:</p>
<ol>
<li>递归地将数组(原问题)划分为两个子数组(子问题)</li>
<li>每个子数组都可以独立地进行排序(子问题可以独立进行求解)</li>
<li>两个有序子数组(子问题的解)可以被合并为一个有序数组(原问题的解)</li>
<li>递归地将数组(原问题)划分为两个子数组(子问题)</li>
<li>每个子数组都可以独立地进行排序(子问题可以独立进行求解)</li>
<li>两个有序子数组(子问题的解)可以被合并为一个有序数组(原问题的解)</li>
</ol>
<h2 id="1212">12.1.2. &nbsp; 通过分治提升效率<a class="headerlink" href="#1212" title="Permanent link">&para;</a></h2>
<p>分治不仅可以有效地解决算法问题,<strong>往往还可以带来算法效率的提升</strong>。在排序算法中,快速排序、归并排序、堆排序相较于选择、冒泡、插入排序更快,就是因为它们应用了分治策略。</p>