Remove the file headers from the docs.

pull/392/head
krahets 2 years ago
parent 2b33f7bc5f
commit b25aadae6f

@ -1,7 +1,3 @@
---
comments: true
---
# 数组
「数组 Array」是一种将 **相同类型元素** 存储在 **连续内存空间** 的数据结构,将元素在数组中的位置称为元素的「索引 Index」。

@ -1,7 +1,3 @@
---
comments: true
---
# 链表
!!! note "引言"

@ -1,7 +1,3 @@
---
comments: true
---
# 列表
**由于长度不可变,数组的实用性大大降低**。在很多情况下,我们事先并不知道会输入多少数据,这就为数组长度的选择带来了很大困难。长度选小了,需要在添加数据中频繁地扩容数组;长度选大了,又造成内存空间的浪费。

@ -1,7 +1,3 @@
---
comments: true
---
# 小结
- 数组和链表是两种基本数据结构,代表了数据在计算机内存中的两种存储方式,即连续空间存储和离散空间存储。两者的优点与缺点呈现出此消彼长的关系。

@ -1,7 +1,3 @@
---
comments: true
---
# 算法效率评估
## 算法评价维度

@ -1,7 +1,3 @@
---
comments: true
---
# 空间复杂度
「空间复杂度 Space Complexity」统计 **算法使用内存空间随着数据量变大时的增长趋势**。这个概念与时间复杂度很类似。

@ -1,7 +1,3 @@
---
comments: true
---
# 权衡时间与空间
理想情况下,我们希望算法的时间复杂度和空间复杂度都能够达到最优,而实际上,同时优化时间复杂度和空间复杂度是非常困难的。

@ -1,7 +1,3 @@
---
comments: true
---
# 小结
### 算法效率评估

@ -1,7 +1,3 @@
---
comments: true
---
# 时间复杂度
## 统计算法运行时间

@ -1,7 +1,3 @@
---
comments: true
---
# 数据结构分类
数据结构主要可根据「逻辑结构」和「物理结构」两种角度进行分类。

@ -1,7 +1,3 @@
---
comments: true
---
# 数据与内存
## 基本数据类型

@ -1,7 +1,3 @@
---
comments: true
---
# 小结
- 整数 byte, short, int, long 、浮点数 float, double 、字符 char 、布尔 boolean 是计算机中的基本数据类型,占用空间的大小决定了它们的取值范围。

@ -1,7 +1,3 @@
---
comments: true
---
# 图
「图 Graph」是一种非线性数据结构由「顶点 Vertex」和「边 Edge」组成。我们可将图 $G$ 抽象地表示为一组顶点 $V$ 和一组边 $E$ 的集合。例如,以下表示一个包含 5 个顶点和 7 条边的图

@ -1,7 +1,3 @@
---
comments: true
---
# 图基础操作
图的基础操作分为对「边」的操作和对「顶点」的操作,在「邻接矩阵」和「邻接表」这两种表示下的实现方式不同。

@ -1,7 +1,3 @@
---
comments: true
---
# 图的遍历
!!! note "图与树的关系"

@ -1,7 +1,3 @@
---
comments: true
---
# 哈希冲突
理想情况下,哈希函数应该为每个输入产生唯一的输出,使得 key 和 value 一一对应。而实际上,往往存在向哈希函数输入不同的 key 而产生相同输出的情况,这种情况被称为「哈希冲突 Hash Collision」。哈希冲突会导致查询结果错误从而严重影响哈希表的可用性。

@ -1,7 +1,3 @@
---
comments: true
---
# 哈希表
哈希表通过建立「键 key」和「值 value」之间的映射实现高效的元素查找。具体地输入一个 key ,在哈希表中查询并获取 value ,时间复杂度为 $O(1)$ 。

@ -1,5 +1 @@
---
comments: true
---
# 小结

@ -1,7 +1,3 @@
---
comments: true
---
# 堆
「堆 Heap」是一棵限定条件下的「完全二叉树」。根据成立条件堆主要分为两种类型

@ -1,7 +1,3 @@
---
comments: true
---
# 算法无处不在
听到“算法”这个词,我们一般会联想到数学。但实际上,大多数算法并不包含复杂的数学,而更像是在考察基本逻辑,而这些逻辑在我们日常生活中处处可见。

@ -1,7 +1,3 @@
---
comments: true
---
# 算法是什么
## 算法定义

@ -1,7 +1,3 @@
---
comments: true
---
# 关于本书
五年前发生的一件事,成为了我职业生涯的重要转折点。当时的我在交大读研,对互联网求职一无所知,但仍然硬着头皮申请了 Microsoft 软件工程师实习。面试官让我在白板上写出“快速排序”代码,我畏畏缩缩地写了一个“冒泡排序”,并且还写错了` (ToT) ` 。从面试官的表情上,我看到了一个大大的 "GG" 。

@ -1,7 +1,3 @@
---
comments: true
---
# 一起参与创作
!!! success "开源的魅力"

@ -1,7 +1,3 @@
---
comments: true
---
# 编程环境安装
TODO 视频教程)

@ -1,7 +1,3 @@
---
comments: true
---
# 如何使用本书
## 图文搭配学

@ -1,7 +1,3 @@
---
comments: true
---
# 二分查找
「二分查找 Binary Search」利用数据的有序性通过每轮缩小一半搜索区间来查找目标元素。

@ -1,7 +1,3 @@
---
comments: true
---
# 哈希查找
!!! question

@ -1,7 +1,3 @@
---
comments: true
---
# 线性查找
「线性查找 Linear Search」是一种最基础的查找方法其从数据结构的一端开始依次访问每个元素直到另一端后停止。

@ -1,7 +1,3 @@
---
comments: true
---
# 小结
- 线性查找是一种最基础的查找方法,通过遍历数据结构 + 判断条件实现查找。

@ -1,7 +1,3 @@
---
comments: true
---
# 冒泡排序
「冒泡排序 Bubble Sort」是一种最基础的排序算法非常适合作为第一个学习的排序算法。顾名思义「冒泡」是该算法的核心操作。

@ -1,7 +1,3 @@
---
comments: true
---
# 插入排序
「插入排序 Insertion Sort」是一种基于 **数组插入操作** 的排序算法。

@ -1,7 +1,3 @@
---
comments: true
---
# 排序简介
「排序算法 Sorting Algorithm」使得列表中的所有元素按照从小到大的顺序排列。

@ -1,7 +1,3 @@
---
comments: true
---
# 归并排序
「归并排序 Merge Sort」是算法中“分治思想”的典型体现其有「划分」和「合并」两个阶段

@ -1,7 +1,3 @@
---
comments: true
---
# 快速排序
「快速排序 Quick Sort」是一种基于“分治思想”的排序算法速度很快、应用很广。

@ -1,6 +1,2 @@
---
comments: true
---
# 小结

@ -1,7 +1,3 @@
---
comments: true
---
# 双向队列
对于队列,我们只能在头部删除或在尾部添加元素,而「双向队列 Deque」更加灵活在其头部和尾部都能执行元素添加或删除操作。

@ -1,7 +1,3 @@
---
comments: true
---
# 队列
「队列 Queue」是一种遵循「先入先出 first in, first out」数据操作规则的线性数据结构。顾名思义队列模拟的是排队现象即外面的人不断加入队列尾部而处于队列头部的人不断地离开。

@ -1,7 +1,3 @@
---
comments: true
---
# 栈
「栈 Stack」是一种遵循「先入后出 first in, last out」数据操作规则的线性数据结构。我们可以将栈类比为放在桌面上的一摞盘子如果需要拿出底部的盘子则需要先将上面的盘子依次取出。

@ -1,7 +1,3 @@
---
comments: true
---
# 小结
- 栈是一种遵循先入后出的数据结构,可以使用数组或链表实现。

@ -1,7 +1,3 @@
---
comments: true
---
# AVL 树 *
在「二叉搜索树」章节中提到,在进行多次插入与删除操作后,二叉搜索树可能会退化为链表。此时所有操作的时间复杂度都会由 $O(\log n)$ 劣化至 $O(n)$ 。

@ -1,7 +1,3 @@
---
comments: true
---
# 二叉搜索树
「二叉搜索树 Binary Search Tree」满足以下条件

@ -1,7 +1,3 @@
---
comments: true
---
# 二叉树
「二叉树 Binary Tree」是一种非线性数据结构代表着祖先与后代之间的派生关系体现着“一分为二”的分治逻辑。类似于链表二叉树也是以结点为单位存储的结点包含「值」和两个「指针」。

@ -1,7 +1,3 @@
---
comments: true
---
# 二叉树遍历
从物理结构角度看,树是一种基于链表的数据结构,因此遍历方式也是通过指针(即引用)逐个遍历结点。同时,树还是一种非线性数据结构,这导致遍历树比遍历链表更加复杂,需要使用搜索算法来实现。

@ -1,7 +1,3 @@
---
comments: true
---
# 小结
- 二叉树是一种非线性数据结构,代表着“一分为二”的分治逻辑。二叉树的结点包含「值」和两个「指针」,分别指向左子结点和右子结点。

Loading…
Cancel
Save