第一章 欢迎学习《玩转数据结构》
1-1 欢迎学习《玩转数据结构》
1-2 学习数据结构(和算法)到底有没有用?
1-3 关于课程学习的更多注意事项
1-4 课程编程环境搭建
1-1 欢迎学习《玩转数据结构》
数据结构研究的是数据如何在计算机中进行组织和存储,使得我们可以高效的获取数据或者修改数据。
数据结构可以分为三种结构:
(1) 线性结构:数组;栈;队列;链表;哈希表…
(2) 树结构:二叉树;二分搜索树;AVL;红黑树;Treap;Splay;堆;Trie;线段树;K-D树;并查集;哈夫曼树…
(3)图结构:邻接矩阵;邻接表…
我们需要根据应用的不同,灵活选择最合适的数据结构。
举几个栗子:
A。数据库:为了实现数据存储需要的知识:树结构 (AVL,红黑树,Treap,伸展树,B树)、哈希表
B。操作系统:为了实现操作系统快速在多任务间切换需要的知识:系统栈、优先队列(堆)
C。文件压缩:哈夫曼树
D。通讯录:查找联系人功能:使用Trie前缀树
E。游戏:最典型的是寻路算法。图论算法;DFS(使用栈),BFS(使用队列)
数据结构+算法=程序
课程设置
面向基础:递归、调试、简单的复杂度分析
手把手的底层实现,创建属于自己的小型的数据结构库
强调比较和优化
面向面试:数组、栈、队列、链表、二分搜索树、堆
面向竞赛:线段树、Trie、并查集
面试和竞赛(leetcode)
稍微复杂一些:AVL、红黑树、哈希表
1-2 学习数据结构(和算法)到底有没有用?
随着现在工具越来越发达,我们使用现有的开发工具来拼凑出一个产品实际上是越来越容易的,甚至这部分工作以后不需要计算机专业的同学来做,因为工具已经足够的简单,足够的发达,创造产品的人将从技术细节中解放出来,会把更多的精力放在创意,产品设计,交互体验等等这些方面。
大量使用数据结构和算法的地方有:
底层的操作系统:Windows, macOS, Linux
移动操作系统的开发和优化:android, iOS
不同的数据库:redis, oracle, MySQL, mongoDB
不同的语言、不同的开发环境:java, swift, xcode
以及搭建在以上内容之上的各种各样的框架etc
越大的公司,越需要拥有扎实的数据结构(和算法)功底的同学;学好数据结构,能够大大提高你的技术上限,才能在计算机科学这条职业道路上走的更远。
1-3 关于课程学习的更多注意事项
《算法与数据结构》与这门课的区别:
- 内容重叠程度低 (二分搜索树、堆、并查集)
- 各种排序算法的比较:选择排序、插入排序、归并排序(自底向上,自顶向下)、快速排序(单路、双路、三路)、堆排序
- 涉及图算法:连通性、寻路、Prim、Kruskal、无向图最短路径、Dijkstra、Bellman-Ford
本课程语言上:选择Java,完全面向对象
关于脚本语言的特殊性:如JS, Python等
个人认为:脚本语言可以用来学习数据结构的原理,但是不适合用于考察数据结构(和算法)的性能(因为对于脚本语言来说,你写出来的逻辑它的性能怎样不仅仅和你的逻辑相关,还非常依赖于脚本语言的解析器对不同的写法解析上的不同,如python的生成表达式)
面向面试:数据结构知识面试的一部分,甚至只是算法面试的一部分
竞赛涵盖的内容更广泛,深度也更高:图论、计算几何、组合数学、概率、更复杂的算法和数据结构
1-4 课程编程环境搭建
Java语言(Java8):课程代码本身对Java语言版本并没有太多要求
推荐IntelliJ IDEA
每节课上完了都做好笔记,做好总结,慢慢进步。