这里只讲一些加深认知的地方,具体code问题不讲。
程序设计的本质
使用极低的计算机内存和极快的时间完成问题的求解。
这个计算流程,也就是怎么计算是程序设计的主要目的。
使用计算机解决问题
利用计算机解决问题本质上就是把问题分解成独立的状态,状态间存在因果关系。
状态:可以理解为问题求解过程中所经过的子问题。
可以用一张图来理解
对于每个状态落实到代码上就是状态空间,DS和AL则是通过(划分、归纳、提取、抽象)不同的思考流程(方法)来帮助提高程序遍历状态空间的效率。
思维方式
对于很多具体问题,我们需要提炼共性(包含但不限于等价性),把它们抽象为一个状态。
等价性
常见两种用途。
第一种就是归类问题,把很多种情况看作一种情况(归类为一种情况)。
例子待补充,感兴趣的可以看吴老师的《计算之魂》
第二种是利用等价信息间接解决问题,因为问题不容易直接解,但解决和它等价的问题,原问题也就可以求解了。
因果关系
建立状态间的关系。在上图这些状态中找到彼此的关联(一个状态是由一个状态推导过来的),以图的角度思考即化成一张图。
debug
就是根据出现的异常推导原因(沿着因果链逆向推理的过程)。遇到一个异常状态,需要通过因果链判断出进入这个状态的原因。
状态和它们的因果关系链在计算机中另一个常见的应用就是OS的“快照”,通过这个功能可以倒退回上一个OS的状态。
软件工程中叫做代码版本的管理工具也可以作为例子。
参考资料
《计算之魂》
《算法进阶指南》