程序设计需要了解的基本思想

这里只讲一些加深认知的地方,具体code问题不讲。

程序设计的本质

使用极低的计算机内存和极快的时间完成问题的求解。

这个计算流程,也就是怎么计算是程序设计的主要目的。

使用计算机解决问题

利用计算机解决问题本质上就是把问题分解成独立的状态状态间存在因果关系。

状态:可以理解为问题求解过程中所经过的子问题。

可以用一张图来理解

程序设计需要了解的基本思想_第1张图片

状态就所谓是图论的点,因果关系就是有向边,状态间可以并行(也就是子问题同时解决)或串行(子问需要按”顺序”解决)。

对于每个状态落实到代码上就是状态空间,DS和AL则是通过(划分、归纳、提取、抽象)不同的思考流程(方法)来帮助提高程序遍历状态空间的效率。

思维方式

对于很多具体问题,我们需要提炼共性(包含但不限于等价性),把它们抽象为一个状态

等价性

常见两种用途。

第一种就是归类问题,把很多种情况看作一种情况(归类为一种情况)。

例子待补充,感兴趣的可以看吴老师的《计算之魂》

第二种是利用等价信息间接解决问题,因为问题不容易直接解,但解决和它等价的问题,原问题也就可以求解了。

因果关系

建立状态间的关系。在上图这些状态中找到彼此的关联(一个状态是由一个状态推导过来的),以图的角度思考即化成一张图。

debug

就是根据出现的异常推导原因(沿着因果链逆向推理的过程)。遇到一个异常状态,需要通过因果链判断出进入这个状态的原因。

状态和它们的因果关系链在计算机中另一个常见的应用就是OS的“快照”,通过这个功能可以倒退回上一个OS的状态。
软件工程中叫做代码版本的管理工具也可以作为例子。

参考资料

《计算之魂》

《算法进阶指南》

你可能感兴趣的:(算法,算法)