Skip to content

Commit 8b2c77a

Browse files
committed
docs: 更新文档
1 parent 3faf2bf commit 8b2c77a

File tree

5 files changed

+44
-9
lines changed

5 files changed

+44
-9
lines changed

README.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,9 @@
1111

1212
<h1 align="center">algorithm-tutorial</h1>
1313

14-
> 算法、数据结构学习要点:
14+
> algorithm-tutorial 是一个数据结构与算法教程。
1515
>
16-
> 三分学,七分练
17-
>
18-
> 坚持 + 坚持 + 坚持
16+
> 掌握数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样。
1917
>
2018
> - 🔁 项目同步维护:[Github](https://github.com/dunwu/algorithm-tutorial/) | [Gitee](https://gitee.com/turnon/algorithm-tutorial/)
2119
> - 📖 电子书阅读:[Github Pages](https://dunwu.github.io/algorithm-tutorial/) | [Gitee Pages](http://turnon.gitee.io/algorithm-tutorial/)
@@ -26,8 +24,8 @@
2624

2725
- [算法概述](docs/overview.md)
2826
- [数组和链表](docs/数组和链表.md)
29-
- [线性表的查找](docs/线性表的查找.md)
3027
- [栈和队列](docs/栈和队列.md)
28+
- [线性表的查找](docs/线性表的查找.md)
3129
- [线性表的排序](docs/线性表的排序.md)
3230
- [跳表](docs/跳表.md)
3331
- [散列表](docs/散列表.md)
@@ -203,6 +201,7 @@
203201
- [算法设计与分析 Design and Analysis of Algorithms](https://class.coursera.org/algorithms-001/lecture) 由北大教授 Wanling Qu 在 coursera 讲授的一门算法课程。首先介绍一些与算法有关的基础知识,然后阐述经典的算法设计思想和分析技术,主要涉及的算法设计技术是:分治策略、动态规划、贪心法、回溯与分支限界等。每个视频都配有相应的讲义(pdf 文件)以便阅读和复习。
204202
- [算法面试通关 40 讲](https://time.geekbang.org/course/intro/100019701)
205203
- [数据结构与算法之美](https://time.geekbang.org/column/intro/100017301)
204+
- [Data Structures - Computer Science Course for Beginners](https://www.youtube.com/watch?v=zg9ih6SVACc) - 高赞 YouTube 视频教程
206205

207206
## 🚪 传送
208207

docs/分治算法.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# 分治算法
2+
3+
分治算法的核心就是分而治之,也就是将原问题划分成 n 个规模较小,并且结构与原问题相似的子问题,分别解决这些子问题,然后再合并其结果,得到原问题的解。
4+
5+
**分治算法是一种处理问题的思想,递归是一种编程技巧**。分治算法一般都比较适合用递归来实现。分治算法的递归实现中,每一层递归都会涉及这样三个操作:
6+
7+
- 分解:将原问题分解成一系列子问题;
8+
- 解决:递归地求解各个子问题,若子问题足够小,则直接求解;
9+
- 合并:将子问题的结果合并成原问题。
10+
11+
分治算法能解决的问题,一般需要满足下面这几个条件:
12+
13+
- 原问题与分解成的小问题具有相同的模式;
14+
- 原问题分解成的子问题可以独立求解,子问题之间没有相关性,这一点是分治算法跟动态规划的明显区别,等我们讲到动态规划的时候,会详细对比这两种算法;
15+
- 具有分解终止条件,也就是说,当问题足够小时,可以直接求解;
16+
- 可以将子问题合并成原问题,而这个合并操作的复杂度不能太高,否则就起不到减小算法总体复杂度的效果了。
17+
18+
## 参考资料

docs/数组和链表.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# 数组和链表
22

3-
> 数组和链表分别代表了连续空间和不连续空间的存储方式,它们是线性表(Linear List)的典型代表。其他所有的数据结构,比如栈、队列、二
4-
> 叉树、B+ 树等,实际上都是这两者的结合和变化。
3+
> 数组和链表分别代表了连续空间和不连续空间的存储方式,它们是线性表(Linear List)的典型代表。其他所有的数据结构,比如栈、队列、二叉树、B+ 树等,实际上都是这两者的结合和变化。
54
65
<!-- TOC depthFrom:2 depthTo:3 -->
76

@@ -34,7 +33,7 @@
3433

3534
1. **用连续的内存空间来存储数据**
3635
2. **数组支持随机访问,根据下标随机访问的时间复杂度为 `O(1)`**
37-
3. **空间大小固定**,一旦建立,不能再改变。
36+
3. **空间大小固定**,一旦建立,不能再改变。扩容只能采用复制数组的方式。
3837
4. 在旧式编程语言中(如有中阶语言之称的 C),程序不会对数组的操作做下界判断,也就有潜在的越界操作的风险。
3938

4039
#### 一维数组
@@ -336,7 +335,7 @@ public DListNode<E> find(E value) {
336335
- 链表用 **不连续** 的内存空间来存储数据;并通过一个指针按顺序将这些空间串起来,形成一条链。
337336
- **访问方式**
338337
- 数组**支持随机访问**。根据下标随机访问的时间复杂度为 `O(1)`
339-
- 链表**不支持随机访问**,只能顺序访问。
338+
- 链表**不支持随机访问**,只能顺序访问,时间复杂度为 `O(n)`
340339
- **空间大小**
341340
- 数组空间**大小固定**,扩容只能采用复制数组的方式。
342341
- 链表空间**大小不固定**,扩容灵活。

docs/贪心算法.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# 贪心算法
2+
3+
## 贪心算法思路
4+
5+
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择,就能得到问题的答案。贪心算法需要充分挖掘题目中条件,没有固定的模式,解决有贪心算法需要一定的直觉和经验。
6+
7+
贪心算法**不是对所有问题都能得到整体最优解**。能使用贪心算法解决的问题具有「贪心选择性质」。「贪心选择性质」严格意义上需要数学证明。能使用贪心算法解决的问题必须具备「无后效性」,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
8+
9+
## 贪心算法的应用
10+
11+
霍夫曼编码(Huffman Coding)
12+
13+
Prim 和 Kruskal 最小生成树算法
14+
15+
Dijkstra 单源最短路径算法
16+
17+
## 参考资料
18+
19+
- [数据结构与算法之美](https://time.geekbang.org/column/intro/100017301)

0 commit comments

Comments
 (0)