图解算法(轻松快速掌握实力派程序设计精华)

图解算法(轻松快速掌握实力派程序设计精华)
作者: (日)株式会社ANK|责编:张军|译者:杨亚慧
出版社: 中国青年
原售价: 69.90
折扣价: 24.50
折扣购买: 图解算法(轻松快速掌握实力派程序设计精华)
ISBN: 9787515360034

作者简介

[日]株式会社ANK:该公司的业务范围十分广泛,从常用软件开发到网络系统设计研发,甚至书籍出版都被涵盖其中。同时,与日本翔泳社进行合作,出版过许多编程类和Web开发类的书籍。

内容简介

?自下而上· 自上而下的思考方法? 冒昧问一下,如果让你画人的脸,你会从哪里开始画呢?是从脸的轮廓开始,还是从眼睛或者鼻子开始呢?如果从轮廓开始,就是按照从整体到局部的顺序去画。如果从眼睛或者鼻子开始,就是按照从局部到整体的顺序,通过组合面部器官来构成一张脸。这两种思考方式也可以应用在程序设计中。 将程序粗略地分成几个部分,确定各部分的功能,然后再分别进行细化处理。像这样将抽象的程序具体化的方法称为“自上而下的思考方法”。第5章的程序设计就是体现该思考方法的典型实例。具体化程序时需要考虑程序的功能、执行顺序、重载性等因素。该方法多适用于以下两种情况:一是程序可以正常执行实现目标功能,但是想进一步改善程序的效率时;二是想通过分配更多的程序员进行分工开发,以扩大程序的规模时。在设计程序前认真分析程序设计说明书,整理相关信息,明确问题,你一定可以一步步地编写出完整的程序。 相反,如果先进行每个功能的设计,然后在进行程序“轮廓”加固,完成程序。这种方法被称为“自下而上的思考方法”。这种方法存在一定的弊端,严重时可能会出现程序突然中止的情况,也更容易出现报错。但是这种方法比较适合技术上不够稳定的情况,以及编写研究性色彩浓厚的程序时。程序设计基本都是按照自上而下的方法进行的,只有在个别技术不够稳定的情况下才会使用自下而上的方法。 思考一下你在设计程序时使用哪种方法更好呢?决定程序设计方法是编程的开始。 ?费时的处理? 目前计算机的处理速度已经变得非常迅速,虽说如此,一个个小小的处理加起来还是需要花费一定的时间。如果能清楚掌握哪些处理是比较费时的,那么对提高程序效率是大有用处的。 ◎触发机械动作的处理 最常见的便是磁盘的读写。这类处理中,通常程序会在处理结束前终止运行,而且,与读出数据相比,写入数据将花费更多的时间。所以,需要频繁访问磁盘时,尽可能一次性将数据全部读入内存,在内存中进行相应的处理。尽管机械相关的处理肉眼不可见,实际上,向屏幕输出显示、传递信息等处理比在内存中进行运算要花费更多时间。有时候,其所花费的时间也可以等价于程序执行的过程。 ◎浮点运算 使用float型或double型变量进行浮点运算一般会比整型运算花费更多的时间。所以,对于能用整数完成的运算,尽可能将其定义成整型(int型最佳)。如果不得不进行浮点运算,并且想提高处理的速度,可以使用以下方法:将整数看作是“实数扩大100倍的数”,进行整数运算,将所得的值除以100,再输出最终的运算结果。这种运算方法称为固定浮点数运算。使用该方法时,需要注意运算精度的要求。 ◎循环处理 使用for或者while语句的循环处理中,虽然程序命令只有一句,但是可能会被反复执行1000回甚至10000回。改进循环体中的内容会比改善其他普通的处理更加高效。例如,在10000次循环处理的功能中,执行1次处理花费0.1秒,如果改善程序将其处理效率提高至0.01秒,16分40秒的处理将被缩短为1分40秒。 ?学习算法的诀窍? 前面已经说过,解决程序问题时,算法并不是唯一需要考虑的要素。最重要的是如何才能在节约内存的状态下让程序高效运转,当然,有时即使消耗大量内存,也要考虑如何提高效率,相反亦是如此。 例如,在涉及复杂计算的程序中,有许多相同的运算处理,那么我们可以将相同运算处理的结果保存到数组中,再从数组中读取数据(第2个之后的数据)。目前,这种(利用缓存的)方法被广泛应用于CPU和OS中。这种根据不同的场景进行逐一计算处理的做法更加高效。 也许只要对算法稍作修改,就可以大大提高程序的执行效率。例如,求0~n之间的偶数,你会如何编写代码呢? s = 0 for(i = 0; i < =n; i++) if(i%2 == 0) s += i; printf(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"%d\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", s); 执行上述代码,当i为奇数时,就会进行无效处理,造成浪费。将代码改成如下形式,在每次执行循环体时i的值加2,同时删除if语句的选择处理,程序的执行效率将大大提高。 s = 0 for(i = 0; i <= n; i += 2) s += i; printf(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"%d\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", s); 如果你很擅长数学运算,也可以使用数列知识编写代码。这样,程序代码将缩短至1行,当n的值较大时,该语句的效果立竿见影。 printf(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"%d''''''''''''''''n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", (1 + n/2) * n/2); 计算机只不过是一台忠实地根据输入语句执行命令的机器。计算机本身并不会利用数学逻辑推理出高效的算法,因此需要程序员为其提供指令。这样看来,与计算机相比,人的头脑岂不是更胜一筹? 想要轻松有趣学习算法的人的好伴侣!日本超高人气的绘本系列图书之图解算法闪亮来袭!累计销量70万+!大量萌系插图精彩呈现,原来算法还可以这样学!打破以往枯燥式的讲解,寓教于乐!形式像绘本一样有趣,内容像辞典一样严谨! 为什么学习算法? ●让程序更高效地运行,迅速解决问题 ●锻炼逻辑思维能力,学好即可受益终生 ●以不变应万变,用算法为编程保驾护航 为什么选择本书? ●有趣 你见过一本用插图来讲解算法的书吗?轻松有趣的同时,该讲的知识却一点儿也不落下! ●科学 常常为不知该怎么学好算法而烦恼?秉持寓教于乐的理念,带你体验科学的学习方法! ●省心 在众多的算法书籍中眼花缭乱,不知所措?寻找优质的算法入门教程,这一本就Go!