File tree Expand file tree Collapse file tree 5 files changed +44
-9
lines changed
Expand file tree Collapse file tree 5 files changed +44
-9
lines changed Original file line number Diff line number Diff line change 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/ )
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 )
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
Original file line number Diff line number Diff line change 1+ # 分治算法
2+
3+ 分治算法的核心就是分而治之,也就是将原问题划分成 n 个规模较小,并且结构与原问题相似的子问题,分别解决这些子问题,然后再合并其结果,得到原问题的解。
4+
5+ ** 分治算法是一种处理问题的思想,递归是一种编程技巧** 。分治算法一般都比较适合用递归来实现。分治算法的递归实现中,每一层递归都会涉及这样三个操作:
6+
7+ - 分解:将原问题分解成一系列子问题;
8+ - 解决:递归地求解各个子问题,若子问题足够小,则直接求解;
9+ - 合并:将子问题的结果合并成原问题。
10+
11+ 分治算法能解决的问题,一般需要满足下面这几个条件:
12+
13+ - 原问题与分解成的小问题具有相同的模式;
14+ - 原问题分解成的子问题可以独立求解,子问题之间没有相关性,这一点是分治算法跟动态规划的明显区别,等我们讲到动态规划的时候,会详细对比这两种算法;
15+ - 具有分解终止条件,也就是说,当问题足够小时,可以直接求解;
16+ - 可以将子问题合并成原问题,而这个合并操作的复杂度不能太高,否则就起不到减小算法总体复杂度的效果了。
17+
18+ ## 参考资料
Original file line number Diff line number Diff line change 11# 数组和链表
22
3- > 数组和链表分别代表了连续空间和不连续空间的存储方式,它们是线性表(Linear List)的典型代表。其他所有的数据结构,比如栈、队列、二
4- > 叉树、B+ 树等,实际上都是这两者的结合和变化。
3+ > 数组和链表分别代表了连续空间和不连续空间的存储方式,它们是线性表(Linear List)的典型代表。其他所有的数据结构,比如栈、队列、二叉树、B+ 树等,实际上都是这两者的结合和变化。
54
65<!-- TOC depthFrom:2 depthTo:3 -->
76
3433
35341 . ** 用连续的内存空间来存储数据** 。
36352 . ** 数组支持随机访问,根据下标随机访问的时间复杂度为 ` O(1) ` ** 。
37- 3 . ** 空间大小固定** ,一旦建立,不能再改变。
36+ 3 . ** 空间大小固定** ,一旦建立,不能再改变。扩容只能采用复制数组的方式。
38374 . 在旧式编程语言中(如有中阶语言之称的 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 - 链表空间** 大小不固定** ,扩容灵活。
Original file line number Diff line number Diff line change 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 )
You can’t perform that action at this time.
0 commit comments