parent
1a49631dba
commit
c2d641537e
@ -0,0 +1,13 @@
|
|||||||
|
# 小结
|
||||||
|
|
||||||
|
- 图由顶点和边组成,可以表示为一组顶点和一组边构成的集合。
|
||||||
|
- 相比线性关系(链表)和分治关系(树),网络关系(图)的自由度更高,也从而更为复杂。
|
||||||
|
- 有向图的边存在方向,连通图中的任意顶点都可达,有权图的每条边都包含权重变量。
|
||||||
|
- 邻接矩阵使用方阵来表示图,每一行(列)代表一个顶点,矩阵元素代表边,使用 $1$ 或 $0$ 来表示两个顶点之间有边或无边。邻接矩阵的增删查操作效率很高,但占用空间大。
|
||||||
|
- 邻接表使用多个链表来表示图,第 $i$ 条链表对应顶点 $i$ ,其中存储了该顶点的所有邻接顶点。邻接表相对邻接矩阵更加节省空间,但由于需要通过遍历链表来查找边,因此时间效率较低。
|
||||||
|
- 当邻接表中的链表过长时,可以将其转化为红黑树或哈希表,从而提升查询效率。
|
||||||
|
- 从算法思想角度分析,邻接矩阵体现“以空间换时间”,邻接表体现“以时间换空间”
|
||||||
|
- 图可以用于建模各类现实系统,例如社交网络、地铁线路等。
|
||||||
|
- 树是图的一种特例,树的遍历也是图的遍历的一种特例。
|
||||||
|
- 图的广度优先遍历是一种由近及远、层层扩张的搜索方式,常借助队列实现。
|
||||||
|
- 图的深度优先遍历是一种优先走到底、无路可走再回头的搜索方式,常基于递归来实现。
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
@ -0,0 +1,8 @@
|
|||||||
|
# 小结
|
||||||
|
|
||||||
|
- 堆是一棵限定条件下的完全二叉树,根据成立条件可分为大顶堆和小顶堆。大(小)顶堆的堆顶元素最大(小)。
|
||||||
|
- 优先队列定义为一种具有出队优先级的队列。堆是实现优先队列的最常用数据结构。
|
||||||
|
- 堆的常用操作和对应时间复杂度为元素入堆 $O(\log n)$ 、堆顶元素出堆 $O(\log n)$ 、访问堆顶元素 $O(1)$ 等。
|
||||||
|
- 完全二叉树非常适合用数组来表示,因此我们一般用数组来存储堆。
|
||||||
|
- 堆化操作用于修复堆的特性,在入堆和出堆操作中都会使用到。
|
||||||
|
- 输入 $n$ 个元素并建堆的时间复杂度可以被优化至 $O(n)$ ,非常高效。
|
@ -0,0 +1,7 @@
|
|||||||
|
# 小结
|
||||||
|
|
||||||
|
- 算法在生活中随处可见,并不高深莫测。我们已经不知不觉地学习到许多“算法”,用于解决生活中大大小小的问题。
|
||||||
|
- “查字典”的原理和二分查找算法一致。二分体现分而治之的重要算法思想。
|
||||||
|
- 算法是在有限时间内解决特定问题的一组指令或操作步骤,数据结构是在计算机中组织与存储数据的方式。
|
||||||
|
- 数据结构与算法两者紧密联系。数据结构是算法的底座,算法是发挥数据结构的舞台。
|
||||||
|
- 乐高积木对应数据,积木形状和连接形式对应数据结构,拼装积木的流程步骤对应算法。
|
After Width: | Height: | Size: 152 KiB |
@ -1,2 +1,11 @@
|
|||||||
# 小结
|
# 小结
|
||||||
|
|
||||||
|
- 冒泡排序通过交换相邻元素来实现排序。通过增加标志位实现提前返回,我们可将冒泡排序的最佳时间复杂度优化至 $O(N)$ 。
|
||||||
|
- 插入排序每轮将待排序区间内元素插入至已排序区间的正确位置,从而实现排序。插入排序的时间复杂度虽为 $O(N^2)$ ,但因为总体操作少而很受欢迎,一般用于小数据量的排序工作。
|
||||||
|
- 快速排序基于哨兵划分操作实现排序。在哨兵划分中,有可能每次都选取到最差的基准数,从而导致时间复杂度劣化至 $O(N^2)$ ,通过引入中位数基准数或随机基准数可大大降低劣化概率。尾递归方法可以有效减小递归深度,将空间复杂度优化至 $O(\log N)$ 。
|
||||||
|
- 归并排序包含划分和合并两个阶段,是分而治之的标准体现。对于归并排序,排序数组需要借助辅助数组,空间复杂度为 $O(N)$ ;而排序链表的空间复杂度可以被优化至 $O(1)$ 。
|
||||||
|
- 下图总结对比了各个排序算法的运行效率与特性。其中,桶排序中 $k$ 为桶的数量;基数排序仅适用于正整数、字符串、特定格式的浮点数,$k$ 为最大数字的位数。
|
||||||
|
|
||||||
|
![排序算法对比](summary.assets/sorting_algorithms_comparison.png)
|
||||||
|
|
||||||
|
- 总体来看,我们追求运行快、稳定、原地、正向自适应性的排序。显然,如同其它数据结构与算法一样,同时满足这些条件的排序算法并不存在,我们需要根据问题特点来选择排序算法。
|
||||||
|
Loading…
Reference in new issue