题记:花了断断续续四个月的时间,终于将Coursera上Robert Sedgewick老师的普林斯顿两部分算法课学习完。上课时仅以满分完成作业为目标,每周都赶得紧紧张张,回想起来才发现这些基本数据结构有些已经遗忘到只剩下一个概念了,于是做个计划:温习一遍教材,并把这些基本数据结构手写一遍加深印象。

第一章 基础

1. 算法课的正确打开方式

1.1. 研究一个新的应用领域时,如何将其转换为可计算问题:

1)定义API;

2)根据特定的应用场景开发用例代码;

3)定义类实例变量所需的数据结构(一组值集的表示),并通过它实现API所对应的抽象数据类型;

4)描述算法(实现一系列操作的方法),并根据它实现类中的实例方法;

5)分析算法的性能特点。

1.2. 在实验可以重复执行以及假定可以被证伪的前提下,如何通过科学方法得出正确的计算模型(算法):

1)细致地观察应用场景的特点;

2)根据观察结果提出假设模型;

3)根据模型预测计算结果;

4)继续观察并核实预测的准确性;

5)如此反复直到预测和观察一致。

1.3. 书中研究各类问题的基本步骤(上文1&2):

1)完整而详细地定义问题,找出解决问题所需的基本抽象操作并定义一份API;

2)简洁地实现一种初级算法,给出一个精心组织的开发用例并使用实际数据作为输入;

3)当实现所能解决的问题的最大规模达不到期望时决定改进还是放弃;

4)逐步改进实现,通过经验性分析或(和)数学分析验证改进后的效果;

5)用更高层次的抽象表示数据结构或算法来设计更高级的改进版本;

6)如果可能尽量为最坏情况下的性能提供保证,但在处理普通数据时也要有良好的性能;

7)在适当的时候讲更细致的深入研究留给有经验的研究者并继续解决下一个问题。

网友评论