《枕边算法书》阅读笔记(3)
排序与搜索是所有算法中最基础的算法。排序,计算机中用了sorting这个词,而非ordering,因为ordering一词有太多意义,用ordering表示排序,很可能会导致混淆。比如下面这个句子:Since only two of our tape drivers were in working order. I was ordered to order more tape units in short order, in order to order the data several orders of magnitude faster. 这段话中order有各种各样的意思,不禁让我联想到了上海话中“二百二十二”的发音,3个都是二,但3个发音都不一样。
排序算法虽然是基础,但包含了非常丰富的内容。我觉得他括号中标注的一段话很正确,人们常以为“最基础的”就是“最容易”的,其实不然。我觉得“最基础的”应该是“最重要”的,学习的过程是虽说通常是由浅入深,但是基础扎实对后续更高层次知识技能的学习是很重要的。我认识的一些优秀的程序员,在解决一个需求时,用在“编码”上的时间并不是很多,最基础也是最重要的,是前期把需求和思路理清,最多的时间是花费在此的。在把所有东西都理清了,编码时一气呵成,甚至在调试代码后,返工的时间也大大缩减。
排序算法有很多,多了解一些算法的优缺点,考虑到每种算法的“最差情况”,针对自身面对情况时选择哪种算法效率最高。这就涉及到了算法的核心--“效率”,所有的算法设计的初衷都是为了“更快更有效地解决问题”。因此作者引申出了“动态规划法”这样一个说法。作者用了计算斐波那契数列的例子,使用函数的递归调用可以解决这个问题。但另开两个变量,然后使用for循环计算,可以提高计算效率。面对同一个问题,进行多种解答的思考;或者面对相似问题,不同解决方法优劣势的辨析。要培养这种能力,我觉得平时在工作学习中多留个心眼,多考虑考虑各种解决方法。虽说很多国内的开发环境中,为了完成不断的需求,解决完问题再回头思考第二种解决方法,实际上挺困难的,那么多阅读别人写的代码也是一种不错的提高途径。