This commit is contained in:
krahets
2023-08-17 05:12:16 +08:00
parent 2014338a92
commit 5884de5246
70 changed files with 1890 additions and 1219 deletions

View File

@ -3433,10 +3433,10 @@
</ol>
<p>因此在能够解决问题的前提下,算法效率成为主要的评价维度,包括:</p>
<ul>
<li><strong>时间效率</strong>,即算法运行速度的快慢。</li>
<li><strong>空间效率</strong>,即算法占用内存空间的大小。</li>
<li><strong>时间效率</strong>算法运行速度的快慢。</li>
<li><strong>空间效率</strong>算法占用内存空间的大小。</li>
</ul>
<p>简而言之,<strong>我们的目标是设计“既快又省”的数据结构与算法</strong>。而有效地评估算法效率至关重要,因为只有了解评价标准,我们才能对比分析各种算法,从而指导算法设计与优化过程。</p>
<p>简而言之,<strong>我们的目标是设计“既快又省”的数据结构与算法</strong>。而有效地评估算法效率至关重要,因为只有这样我们才能将各种算法进行对比,从而指导算法设计与优化过程。</p>
<p>效率评估方法主要分为两种:实际测试和理论估算。</p>
<h2 id="211">2.1.1. &nbsp; 实际测试<a class="headerlink" href="#211" title="Permanent link">&para;</a></h2>
<p>假设我们现在有算法 <code>A</code> 和算法 <code>B</code> ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法是找一台计算机,运行这两个算法,并监控记录它们的运行时间和内存占用情况。这种评估方式能够反映真实情况,但也存在较大局限性。</p>
@ -3445,12 +3445,12 @@
<h2 id="212">2.1.2. &nbsp; 理论估算<a class="headerlink" href="#212" title="Permanent link">&para;</a></h2>
<p>由于实际测试具有较大的局限性,我们可以考虑仅通过一些计算来评估算法的效率。这种估算方法被称为「渐近复杂度分析 Asymptotic Complexity Analysis」简称为「复杂度分析」。</p>
<p><strong>复杂度分析评估的是算法运行效率随着输入数据量增多时的增长趋势</strong>。这个定义有些拗口,我们可以将其分为三个重点来理解:</p>
<ul>
<ol>
<li>“算法运行效率”可分为运行时间和占用空间两部分,与之对应地,复杂度可分为「时间复杂度 Time Complexity」和「空间复杂度 Space Complexity」。</li>
<li>“随着输入数据量增多时”表示复杂度与输入数据量有关,反映了算法运行效率与输入数据量之间的关系。</li>
<li>“随着输入数据量增多时”意味着复杂度反映了算法运行效率与输入数据量之间的关系。</li>
<li>“增长趋势”表示复杂度分析关注的是算法时间与空间的增长趋势,而非具体的运行时间或占用空间。</li>
</ul>
<p><strong>复杂度分析克服了实际测试方法的弊端</strong>。首先,它独立于测试环境,因此分析结果适用于所有运行平台。其次,它可以体现不同数据量下的算法效率,尤其是在大数据量下的算法性能。</p>
</ol>
<p><strong>复杂度分析克服了实际测试方法的弊端</strong>。首先,它独立于测试环境,分析结果适用于所有运行平台。其次,它可以体现不同数据量下的算法效率,尤其是在大数据量下的算法性能。</p>
<p>如果你对复杂度分析的概念仍感到困惑,无需担心,我们会在后续章节详细介绍。</p>
<h2 id="213">2.1.3. &nbsp; 复杂度的重要性<a class="headerlink" href="#213" title="Permanent link">&para;</a></h2>
<p>复杂度分析为我们提供了一把评估算法效率的“标尺”,帮助我们衡量了执行某个算法所需的时间和空间资源,并使我们能够对比不同算法之间的效率。</p>