数据结构学习的 5 个层次。
- 对数据结构与算法核心地位的充分理解与认同;
- 从软件视角对处理器、存储器、显示器等硬件资源的透彻理解;
- 通过编程以软件方式实现数据结构与算法的能力;
- 基于恰当的数据结构与算法设计并实现大型结构化组件及其之�通讯接口的能力;
- 运用软件工程原理与技术确保软件鲁棒性、可靠性及其面向特定目标受众的针对性的能力。
- 第 1 章(入门)
- 计算与算法的一般性概念;
- 确立时空复杂度的度量标准;
- 以递归为例介绍算法设计的一般模式;
- 第 2 章 —— 第 7 章(研读重点)
- 基础部分:序列、树、图、初级搜索树;
- 基本数据结构及其算法的实现和性能分析;
- 第 8 章 —— 第 10 章(关注计算效率)
- 进阶部分:高级搜索树、词典、优先级队列;
- 第 11 章 —— 第 12 章(优化及调校)
- 串排序、高级排序算法;
- 深入理解各类数据结构与算法在不同实际环境中适用性的微妙差异。
注重整体认识,着眼系统思维。
强化计算思维 (computational thinking)。
从 方法论 的角度掌握利用计算求解问题的一般规律和方法。
从 逻辑结构 的角度,将数据结构分为 3 个层次。
- 线性;
- 半线性;
- 非线性。
以遍历算法为线索,点明不同层次之间相互转换的技巧。
从 算法策略 的角度。
- 动态规划;
- 减而治之;
- 分而治之;
将人所擅长的概括化简思维方式与计算机强大的枚举迭代能力结合,高效求解实际应用问题。
从 数据元素 访问形式的角度。
- 循秩访问;
- 循位置访问;
- 循连接访问;
- 循关键码访问;
- 循值访问;
- 循优先级访问;
对各种数据结构进行归类,并指明它们之间的联系与区别。
代数判定树模型以及对应的下界。
如何针对具体计算模型确定特定问题的复杂度下界?
本科毕业生的要求:
- 计算机技术可以做什么?(possibilities)
- 如何做?
- 不能做什么?(limitations)
- 为什么不能做?
尊重认知规律,放眼拓展提升。
学有所乐,学有所获。
计算机科学有其独特的认知规律。
- 记忆 (remember);
- 理解 (understand);
- 应用 (apply);
- 分析 (analyze);
- 评估 (evaluate);
- 创造 (create)。
学习方法。
- 插图:知识点具体化、形象化;
- 对比:认识更加全面而深刻;
- 应用:行胜于言;
- 分析与评估:掌握典型的分析技巧和方法论;
习题是强化和提升学习效果的必由之途,否则无异于 “入宝山而空返”。
该部分一共有 270 多道习题。
好的习题不限于对知识的重复堆砌,更多地侧重拓展与反思。
- 对数据结构接口的扩充;
- 对算法性能的改进;
- 通过查阅文献资料补充相关的知识点;
- 难度极大或过程繁琐的内容,以习题的形式进行一步探讨;
求知求真的过程中,质疑与批判是难能可贵的精神。
反诘与反思是创造创新的起点。
从吸收到反思,在某种意义上就是学习 (learning) 与反学习 (unlearning) 反复迭代、不断上升的过程。