This commit is contained in:
krahets
2023-02-24 18:46:22 +08:00
parent 0edd696eb7
commit 700da13226
50 changed files with 3964 additions and 3964 deletions
@@ -25,7 +25,7 @@
<title>2.1. 算法效率评估 - Hello 算法</title>
<title>2.1.   算法效率评估 - Hello 算法</title>
@@ -111,7 +111,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
2.1. 算法效率评估
2.1. &nbsp; 算法效率评估
</span>
</div>
@@ -268,14 +268,14 @@
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
0. 写在前面
0. &nbsp; &nbsp; 写在前面
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_1">
<span class="md-nav__icon md-icon"></span>
0. 写在前面
0. &nbsp; &nbsp; 写在前面
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -286,7 +286,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/about_the_book/" class="md-nav__link">
0.1. 关于本书
0.1. &nbsp; 关于本书
</a>
</li>
@@ -300,7 +300,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/suggestions/" class="md-nav__link">
0.2. 如何使用本书
0.2. &nbsp; 如何使用本书
</a>
</li>
@@ -314,7 +314,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/installation/" class="md-nav__link">
0.3. 编程环境安装
0.3. &nbsp; 编程环境安装
</a>
</li>
@@ -328,7 +328,7 @@
<li class="md-nav__item">
<a href="../../chapter_preface/contribution/" class="md-nav__link">
0.4. 一起参与创作
0.4. &nbsp; 一起参与创作
</a>
</li>
@@ -367,14 +367,14 @@
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
1. 引言
1. &nbsp; &nbsp; 引言
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
1. 引言
1. &nbsp; &nbsp; 引言
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -385,7 +385,7 @@
<li class="md-nav__item">
<a href="../../chapter_introduction/algorithms_are_everywhere/" class="md-nav__link">
1.1. 算法无处不在
1.1. &nbsp; 算法无处不在
</a>
</li>
@@ -399,7 +399,7 @@
<li class="md-nav__item">
<a href="../../chapter_introduction/what_is_dsa/" class="md-nav__link">
1.2. 算法是什么
1.2. &nbsp; 算法是什么
</a>
</li>
@@ -446,14 +446,14 @@
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
2. 计算复杂度
2. &nbsp; &nbsp; 计算复杂度
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
2. 计算复杂度
2. &nbsp; &nbsp; 计算复杂度
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -473,12 +473,12 @@
<label class="md-nav__link md-nav__link--active" for="__toc">
2.1. 算法效率评估
2.1. &nbsp; 算法效率评估
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
2.1. 算法效率评估
2.1. &nbsp; 算法效率评估
</a>
@@ -498,17 +498,17 @@
<li class="md-nav__item">
<a href="#211" class="md-nav__link">
2.1.1. 算法评价维度
2.1.1. &nbsp; 算法评价维度
</a>
</li>
<li class="md-nav__item">
<a href="#212" class="md-nav__link">
2.1.2. 效率评估方法
2.1.2. &nbsp; 效率评估方法
</a>
<nav class="md-nav" aria-label="2.1.2. 效率评估方法">
<nav class="md-nav" aria-label="2.1.2. &nbsp; 效率评估方法">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -532,7 +532,7 @@
<li class="md-nav__item">
<a href="#213" class="md-nav__link">
2.1.3. 复杂度分析重要性
2.1.3. &nbsp; 复杂度分析重要性
</a>
</li>
@@ -553,7 +553,7 @@
<li class="md-nav__item">
<a href="../time_complexity/" class="md-nav__link">
2.2. 时间复杂度
2.2. &nbsp; 时间复杂度
</a>
</li>
@@ -567,7 +567,7 @@
<li class="md-nav__item">
<a href="../space_complexity/" class="md-nav__link">
2.3. 空间复杂度
2.3. &nbsp; 空间复杂度
</a>
</li>
@@ -581,7 +581,7 @@
<li class="md-nav__item">
<a href="../space_time_tradeoff/" class="md-nav__link">
2.4. 权衡时间与空间
2.4. &nbsp; 权衡时间与空间
</a>
</li>
@@ -595,7 +595,7 @@
<li class="md-nav__item">
<a href="../summary/" class="md-nav__link">
2.5. 小结
2.5. &nbsp; 小结
</a>
</li>
@@ -636,14 +636,14 @@
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
3. 数据结构简介
3. &nbsp; &nbsp; 数据结构简介
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
3. 数据结构简介
3. &nbsp; &nbsp; 数据结构简介
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -654,7 +654,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/data_and_memory/" class="md-nav__link">
3.1. 数据与内存
3.1. &nbsp; 数据与内存
</a>
</li>
@@ -668,7 +668,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/classification_of_data_structure/" class="md-nav__link">
3.2. 数据结构分类
3.2. &nbsp; 数据结构分类
</a>
</li>
@@ -682,7 +682,7 @@
<li class="md-nav__item">
<a href="../../chapter_data_structure/summary/" class="md-nav__link">
3.3. 小结
3.3. &nbsp; 小结
</a>
</li>
@@ -725,14 +725,14 @@
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
4. 数组与链表
4. &nbsp; &nbsp; 数组与链表
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
4. 数组与链表
4. &nbsp; &nbsp; 数组与链表
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -743,7 +743,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/array/" class="md-nav__link">
4.1. 数组(Array
4.1. &nbsp; 数组(Array
</a>
</li>
@@ -757,7 +757,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/linked_list/" class="md-nav__link">
4.2. 链表(LinkedList
4.2. &nbsp; 链表(LinkedList
</a>
</li>
@@ -771,7 +771,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/list/" class="md-nav__link">
4.3. 列表(List
4.3. &nbsp; 列表(List
</a>
</li>
@@ -785,7 +785,7 @@
<li class="md-nav__item">
<a href="../../chapter_array_and_linkedlist/summary/" class="md-nav__link">
4.4. 小结
4.4. &nbsp; 小结
</a>
</li>
@@ -828,14 +828,14 @@
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
5. 栈与队列
5. &nbsp; &nbsp; 栈与队列
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
5. 栈与队列
5. &nbsp; &nbsp; 栈与队列
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -846,7 +846,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/stack/" class="md-nav__link">
5.1. 栈(Stack
5.1. &nbsp; 栈(Stack
</a>
</li>
@@ -860,7 +860,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/queue/" class="md-nav__link">
5.2. 队列(Queue
5.2. &nbsp; 队列(Queue
</a>
</li>
@@ -874,7 +874,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/deque/" class="md-nav__link">
5.3. 双向队列(Deque
5.3. &nbsp; 双向队列(Deque
</a>
</li>
@@ -888,7 +888,7 @@
<li class="md-nav__item">
<a href="../../chapter_stack_and_queue/summary/" class="md-nav__link">
5.4. 小结
5.4. &nbsp; 小结
</a>
</li>
@@ -929,14 +929,14 @@
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
6. 散列表
6. &nbsp; &nbsp; 散列表
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
6. 散列表
6. &nbsp; &nbsp; 散列表
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -947,7 +947,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/hash_map/" class="md-nav__link">
6.1. 哈希表(HashMap
6.1. &nbsp; 哈希表(HashMap
</a>
</li>
@@ -961,7 +961,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/hash_collision/" class="md-nav__link">
6.2. 哈希冲突处理
6.2. &nbsp; 哈希冲突处理
</a>
</li>
@@ -975,7 +975,7 @@
<li class="md-nav__item">
<a href="../../chapter_hashing/summary/" class="md-nav__link">
6.3. 小结
6.3. &nbsp; 小结
</a>
</li>
@@ -1020,14 +1020,14 @@
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
7. 二叉树
7. &nbsp; &nbsp; 二叉树
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
7. 二叉树
7. &nbsp; &nbsp; 二叉树
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1038,7 +1038,7 @@
<li class="md-nav__item">
<a href="../../chapter_tree/binary_tree/" class="md-nav__link">
7.1. 二叉树(Binary Tree
7.1. &nbsp; 二叉树(Binary Tree
</a>
</li>
@@ -1052,7 +1052,7 @@
<li class="md-nav__item">
<a href="../../chapter_tree/binary_tree_traversal/" class="md-nav__link">
7.2. 二叉树遍历
7.2. &nbsp; 二叉树遍历
</a>
</li>
@@ -1066,7 +1066,7 @@
<li class="md-nav__item">
<a href="../../chapter_tree/binary_search_tree/" class="md-nav__link">
7.3. 二叉搜索树
7.3. &nbsp; 二叉搜索树
</a>
</li>
@@ -1080,7 +1080,7 @@
<li class="md-nav__item">
<a href="../../chapter_tree/avl_tree/" class="md-nav__link">
7.4. AVL 树 *
7.4. &nbsp; AVL 树 *
</a>
</li>
@@ -1094,7 +1094,7 @@
<li class="md-nav__item">
<a href="../../chapter_tree/summary/" class="md-nav__link">
7.5. 小结
7.5. &nbsp; 小结
</a>
</li>
@@ -1131,14 +1131,14 @@
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
8. 堆
8. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
8. 堆
8. &nbsp; &nbsp;
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1149,7 +1149,7 @@
<li class="md-nav__item">
<a href="../../chapter_heap/heap/" class="md-nav__link">
8.1. 堆(Heap
8.1. &nbsp; 堆(Heap
</a>
</li>
@@ -1190,14 +1190,14 @@
<label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
9. 图
9. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_10">
<span class="md-nav__icon md-icon"></span>
9. 图
9. &nbsp; &nbsp;
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1208,7 +1208,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph/" class="md-nav__link">
9.1. 图(Graph
9.1. &nbsp; 图(Graph
</a>
</li>
@@ -1222,7 +1222,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph_operations/" class="md-nav__link">
9.2. 图基础操作
9.2. &nbsp; 图基础操作
</a>
</li>
@@ -1236,7 +1236,7 @@
<li class="md-nav__item">
<a href="../../chapter_graph/graph_traversal/" class="md-nav__link">
9.3. 图的遍历
9.3. &nbsp; 图的遍历
</a>
</li>
@@ -1279,14 +1279,14 @@
<label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0">
10. 查找算法
10. &nbsp; &nbsp; 查找算法
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_11_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_11">
<span class="md-nav__icon md-icon"></span>
10. 查找算法
10. &nbsp; &nbsp; 查找算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1297,7 +1297,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/linear_search/" class="md-nav__link">
10.1. 线性查找
10.1. &nbsp; 线性查找
</a>
</li>
@@ -1311,7 +1311,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/binary_search/" class="md-nav__link">
10.2. 二分查找
10.2. &nbsp; 二分查找
</a>
</li>
@@ -1325,7 +1325,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/hashing_search/" class="md-nav__link">
10.3. 哈希查找
10.3. &nbsp; 哈希查找
</a>
</li>
@@ -1339,7 +1339,7 @@
<li class="md-nav__item">
<a href="../../chapter_searching/summary/" class="md-nav__link">
10.4. 小结
10.4. &nbsp; 小结
</a>
</li>
@@ -1386,14 +1386,14 @@
<label class="md-nav__link" for="__nav_12" id="__nav_12_label" tabindex="0">
11. 排序算法
11. &nbsp; &nbsp; 排序算法
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_12">
<span class="md-nav__icon md-icon"></span>
11. 排序算法
11. &nbsp; &nbsp; 排序算法
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1404,7 +1404,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/intro_to_sort/" class="md-nav__link">
11.1. 排序简介
11.1. &nbsp; 排序简介
</a>
</li>
@@ -1418,7 +1418,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/bubble_sort/" class="md-nav__link">
11.2. 冒泡排序
11.2. &nbsp; 冒泡排序
</a>
</li>
@@ -1432,7 +1432,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/insertion_sort/" class="md-nav__link">
11.3. 插入排序
11.3. &nbsp; 插入排序
</a>
</li>
@@ -1446,7 +1446,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/quick_sort/" class="md-nav__link">
11.4. 快速排序
11.4. &nbsp; 快速排序
</a>
</li>
@@ -1460,7 +1460,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/merge_sort/" class="md-nav__link">
11.5. 归并排序
11.5. &nbsp; 归并排序
</a>
</li>
@@ -1474,7 +1474,7 @@
<li class="md-nav__item">
<a href="../../chapter_sorting/summary/" class="md-nav__link">
11.6. 小结
11.6. &nbsp; 小结
</a>
</li>
@@ -1562,17 +1562,17 @@
<li class="md-nav__item">
<a href="#211" class="md-nav__link">
2.1.1. 算法评价维度
2.1.1. &nbsp; 算法评价维度
</a>
</li>
<li class="md-nav__item">
<a href="#212" class="md-nav__link">
2.1.2. 效率评估方法
2.1.2. &nbsp; 效率评估方法
</a>
<nav class="md-nav" aria-label="2.1.2. 效率评估方法">
<nav class="md-nav" aria-label="2.1.2. &nbsp; 效率评估方法">
<ul class="md-nav__list">
<li class="md-nav__item">
@@ -1596,7 +1596,7 @@
<li class="md-nav__item">
<a href="#213" class="md-nav__link">
2.1.3. 复杂度分析重要性
2.1.3. &nbsp; 复杂度分析重要性
</a>
</li>
@@ -1625,8 +1625,8 @@
<h1 id="21">2.1. 算法效率评估<a class="headerlink" href="#21" title="Permanent link">&para;</a></h1>
<h2 id="211">2.1.1. 算法评价维度<a class="headerlink" href="#211" title="Permanent link">&para;</a></h2>
<h1 id="21">2.1. &nbsp; 算法效率评估<a class="headerlink" href="#21" title="Permanent link">&para;</a></h1>
<h2 id="211">2.1.1. &nbsp; 算法评价维度<a class="headerlink" href="#211" title="Permanent link">&para;</a></h2>
<p>在开始学习算法之前,我们首先要想清楚算法的设计目标是什么,或者说,如何来评判算法的好与坏。整体上看,我们设计算法时追求两个层面的目标。</p>
<ol>
<li><strong>找到问题解法</strong>。算法需要能够在规定的输入范围下,可靠地求得问题的正确解。</li>
@@ -1638,7 +1638,7 @@
<li><strong>空间效率</strong>,即算法占用的内存空间大小。</li>
</ul>
<p>数据结构与算法追求“运行速度快、占用内存少”,而如何去评价算法效率则是非常重要的问题,因为只有知道如何评价算法,才能去做算法之间的对比分析,以及优化算法设计。</p>
<h2 id="212">2.1.2. 效率评估方法<a class="headerlink" href="#212" title="Permanent link">&para;</a></h2>
<h2 id="212">2.1.2. &nbsp; 效率评估方法<a class="headerlink" href="#212" title="Permanent link">&para;</a></h2>
<h3 id="_1">实际测试<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h3>
<p>假设我们现在有算法 A 和 算法 B ,都能够解决同一问题,现在需要对比两个算法之间的效率。我们能够想到的最直接的方式,就是找一台计算机,把两个算法都完整跑一遍,并监控记录运行时间和内存占用情况。这种评估方式能够反映真实情况,但是也存在很大的硬伤。</p>
<p><strong>难以排除测试环境的干扰因素</strong>。硬件配置会影响到算法的性能表现。例如,在某台计算机中,算法 A 比算法 B 运行时间更短;但换到另一台配置不同的计算机中,可能会得到相反的测试结果。这意味着我们需要在各种机器上展开测试,而这是不现实的。</p>
@@ -1653,7 +1653,7 @@
</ul>
<p><strong>复杂度分析克服了实际测试方法的弊端</strong>。一是独立于测试环境,分析结果适用于所有运行平台。二是可以体现不同数据量下的算法效率,尤其是可以反映大数据量下的算法性能。</p>
<p>如果感觉对复杂度分析的概念一知半解,无需担心,后续章节会展开介绍。</p>
<h2 id="213">2.1.3. 复杂度分析重要性<a class="headerlink" href="#213" title="Permanent link">&para;</a></h2>
<h2 id="213">2.1.3. &nbsp; 复杂度分析重要性<a class="headerlink" href="#213" title="Permanent link">&para;</a></h2>
<p>复杂度分析给出一把评价算法效率的“标尺”,告诉我们执行某个算法需要多少时间和空间资源,也让我们可以开展不同算法之间的效率对比。</p>
<p>计算复杂度是个数学概念,对于初学者可能比较抽象,学习难度相对较高。从这个角度出发,其并不适合作为第一章内容。但是,当我们讨论某个数据结构或者算法的特点时,难以避免需要分析它的运行速度和空间使用情况。<strong>因此,在展开学习数据结构与算法之前,建议读者先对计算复杂度建立起初步的了解,并且能够完成简单案例的复杂度分析</strong></p>
@@ -1733,7 +1733,7 @@
<nav class="md-footer__inner md-grid" aria-label="页脚" >
<a href="../../chapter_introduction/what_is_dsa/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 1.2. 算法是什么" rel="prev">
<a href="../../chapter_introduction/what_is_dsa/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 1.2. &amp;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>
@@ -1742,20 +1742,20 @@
<span class="md-footer__direction">
上一页
</span>
1.2. 算法是什么
1.2. &nbsp; 算法是什么
</div>
</div>
</a>
<a href="../time_complexity/" class="md-footer__link md-footer__link--next" aria-label="下一页: 2.2. 时间复杂度" rel="next">
<a href="../time_complexity/" class="md-footer__link md-footer__link--next" aria-label="下一页: 2.2. &amp;nbsp; 时间复杂度" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
下一页
</span>
2.2. 时间复杂度
2.2. &nbsp; 时间复杂度
</div>
</div>
<div class="md-footer__button md-icon">