为什么学数据结构和算法?
不管学什么,要抱着目的去学才能发挥最大的效率。
先来说说我为什么学?作为一个物理专业兼修会计专业,毕业做了客户端程序员。行业已经过了红利爆发期(能应用知识就行),招聘门槛水涨船高,只具备 iOS 知识不能满足市场要求,也不能满足未来的职业生涯。客户端+前端=大前端,大前端层出不穷,学不过来;但计算机组成原理、编译原理和此笔记专题 数据结构和算法等内功心法,终身受用。废话不多说,简要如下:
目的
1. 建立时间复杂度、空间 复杂度意识
2. 写出高质量(含性能更高)的代码
3. 快速学习新技术
4. 能够设计基础架构
5. 提升编程技能
6. 训练逻辑思维
7. 积攒人生经验,以此获得工作回报,实现你的价值,完善你的人生
8. 算法 + 数据结构 = 程序 (Pascal之父提出)
思考
1. 掌握了数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样
2. 进大厂的必备内功
3. 写出开源水平的框架才是目标
4. 算法,是一种解决问题的思路和方法,有机会应用到生活和事业的其他方面
5. 长期来看,大脑思考能力是个人最重要的核心竞争力,而算法是为数不多的能够有效训练大脑思考能力的途径之一
如何抓住重点,系统高效地学习
-
什么是数据结构?什么是算法?
从广义上讲,数据结构就是指一组数据的存储结构;算法就是操作数据的一组方法。eg.图书馆的书,书一定规律的编号是数据结构;如何找到一本书是算法。 从狭义上讲,是指某些著名的数据结构和算法,比如队列、栈、堆、二分 查找、动态规划等
-
二者关系
数据结构和算法是相辅相成的 数据结构是为算法服务的,算法要作用在特定的数据结构之上 无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构
-
学习重点是什么?
复杂度分析 因:数据结构和算法解决的是如何更省、更快地存储和处理数据的问题 果:一个考量效 率和资源消耗的方法
如何提高?
- 边学边练,适度刷题
每周花 1~2 小时集中攻克 CheckList 涉及的数据结构和算法。 - 多问、多思考、多互动
学习最好的方法是,找到几个人一起学习,一块儿讨论切磋,有问题及时寻求老师答疑。 - 打怪升级学习法
- 自我激励
- 自我总结:笔记或者思维导图
- 知识需要沉淀,不要想试图一下子掌握所有
- 反复迭代、不 断沉淀的过程
- 先掌握最基础、最常用的
大纲如下:
计划如下:
- 复杂度
- 动态数组
- 链表
- 栈
- 队列
- 二叉树
- 二叉搜索树
- 平衡二叉搜索树
- AVL树
- B树
- 红黑树
- 集合
- 映射
- 哈希表
- 二叉堆
- 优先级队列
- 哈夫曼树
- Trie
- 总结