codecamp

算法

当你编写一个针对一类问题的通用解法,而非针对某一个问题的特定解法时,你就写出了一个算法。我在第一章提到过这个词,但是没有给出详细定义。这也不太好定义,所以我会试用多种方式进行定义。

首先,考虑一些不是算法的问题。当你学习个位数乘法时,你可能会背乘法表。实际上你记住的是100个特定解法,这种知识并不是真正意义的算法。

但是,如果你很“懒”,你可能学习一些作弊技巧。比如,求n与9的乘积,你可以在第一位上写n-1,第二位上写10-n。这一技巧是9与任意个位数相乘的通用解法。这就是一个算法了!

类似地,你学过的进位加法、借位减法、长除法等等这些技术都是算法。算法的特点之一是执行时无需任何智能性。算法是机械过程,按照一组简单的规则,一步接一步的执行。

我认为,人们花那么多时间在学校学习死板的执行算法,无需任何智慧,这实在令人尴尬。

另一方面,算法的设计过程是有趣的,挑战智慧,这才是所谓的编程的核心部分。

一些人们在自然而然状态下做的事情,没有任何难度或下意识地思考,但这才是最难用算法表达的事情。自然语言理解就是很好的例子。我们都在做这件事,但迄今为止没人能解释该怎么做,至少不能以算法的形式给出解释。

稍后在本书中我将有机会针对许多问题设计简单的算法。如果你选修了计算机科学专业的下一门课数据结构,你将看到计算机科学所带来的一些最有趣、最聪明、最有用的算法。

C++ 泛化
C++ 术语表
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }