合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
当你编写一个针对一类问题的通用解法,而非针对某一个问题的特定解法时,你就写出了一个算法。我在第一章提到过这个词,但是没有给出详细定义。这也不太好定义,所以我会试用多种方式进行定义。 首先,考虑一些不是算法的问题。当你学习个位数乘法时,你可能会背乘法表。实际上你记住的是100个特定解法,这种知识并不是真正意义的算法。 但是,如果你很“懒”,你可能学习一些作弊技巧。比如,求n与9的乘积,你可以在第一位上写n-1,第二位上写10-n。这一技巧是9与任意个位数相乘的通用解法。这就是一个算法了! 类似地,你学过的进位加法、借位减法、长除法等等这些技术都是算法。算法的特点之一是执行时无需任何智能性。算法是机械过程,按照一组简单的规则,一步接一步的执行。 我认为,人们花那么多时间在学校学习死板的执行算法,无需任何智慧,这实在令人尴尬。 另一方面,算法的设计过程是有趣的,挑战智慧,这才是所谓的编程的核心部分。 一些人们在自然而然状态下做的事情,没有任何难度或下意识地思考,但这才是最难用算法表达的事情。自然语言理解就是很好的例子。我们都在做这件事,但迄今为止没人能解释该怎么做,至少不能以算法的形式给出解释。 稍后在本书中我将有机会针对许多问题设计简单的算法。如果你选修了计算机科学专业的下一门课数据结构,你将看到计算机科学所带来的一些最有趣、最聪明、最有用的算法。