1.2 fundamentals of algorithmic problem solving

把算法理解为程序上的解
这种解不是答案,而是得到答案的精准路线。

设计和分析算法的几个要点

understading the problem:

读描述,提问,手工模拟,考虑特殊示例,再次提问
着重考虑输入中的边界实例,确保对于所有合法输入,都可以得出正确结果。

ascertaining the capabilities of the computational device:

大多算法建立在冯诺依曼机(也称RAM random-access machine)之上,针对其他机器也有不同的算法,如parallel algorithms。
多数情况下不必担心具体机器的性能问题,单若任务数据量过大,或实时性要求高, 则不可避免的需要考虑到具体机器的性能。

choosing between exact and approximate problem solving

无法求出精确解,如平方根,非线性方程,定积分计算等问题
由于问题固有的复杂性,求出精确解所需时间代价过大
可以利用 模糊算法 去达到 更精确算法

algorithm design techiques

通过学习经典算法设计,融会贯通

designing an algorithm and data structures

1.4详细介绍基本数据类型

methods of specifying an algorithm

比起自然语言描述,更推荐伪代码

本书的伪代码形式:
省略变量定义
利用缩进表示 for if while 作用范围
←表示赋值
//表示注释

流程图flowchart的方式表达算法已经淘汰了。

proving an algorithm’s correctness

数学归纳法是一种常用的方法。因为算法的迭代过程为这种证明方法提供了天然的顺序执行步骤。
单凭几个实例的通过不能验证一个算法的正确,但是验证一个算法不正确只需要一个反例即可,所以反证法也是一个好用的思路。
对于模糊算法,他和精确算法的验证要求也有所不同。详见12章。

analyzing an algorithm

除了正确性外,算法的时间复杂度和空间复杂度也是追求的目标。算法效率的分析详见第2章。
关于算法的简洁性:没有什么确切的数学定义。简洁的算法会更容易理解,应用时产生的bug会更少,但是简洁和算法的效率却没有确定关系,有时甚至简洁的算法在效率上要略低一些,这就需要进行一些取舍了。
关于算法的普适性:有两个方面,一个是解决的问题的普遍性,另一个是可接受的输入的普遍性。看情况即可,有的问题设计一个更普适的算法更简单,而另外有写问题则可能不需要或者不存在普适的解。

coding an algorithm

比起严格的数学证明,测试更加方便可行的去说明一个程序的有效性。
程序代码级别上的性能调优,现代编译器已经在此方面做出了很大努力,我们仍然要掌握一些相关的技巧,如提取循环中的固定变量或公共变量,优化复杂操作为简答操作等。
这类优化固然重要,可以对程序的运行带来常数级别的效率提成,但是算法却可以在运行时间上产生数量级的差异,所以做好这些优化的前提还是已经选择了一个足够优秀的算法。

在工程上,我们经过初步设计得到一个好的算法后,需要在各种资源允许的前提下(实际的项目要求,开发者的时间等)反复不断的对算法进行改进(这也是研究算法的乐趣所在)。

在科研上,对算法的改进何时到头?这就引出了算法的最优性问题。实际上最优性的关键不在于算法的效率,而是在于算法所解决问题的问题规模上:既算法解决问题的最小工作量是多少。 对于某些问题有确切的解,如排序问题,对于问题规模n的数列,排序所需要的最少的比较次数为nlog2n。但是对于一些看似简单的问题,如两个整数相乘,计算机科学却还没有一个最终的答案。

另一个重要的事就是 问题的可解性。这里不是说那些完全没有答案的,或者一些模糊状态的问题(答案可能是很简单的yes or no 但是无法被任何算法解出)。详细见11.3章节,幸运的是,大部分实际的计算问题都是可以用算法解出的。

小结结束时,作者又一次强调了不要因为某些僵硬的思维而感觉算法设计是一个dull activity。创造一个算法是一件有创造性的,反馈强烈的过程。这本书就是为了证明这一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值