今天,当我们使用最为时尚的手持设备、消费各种各样的信息服务时,都在不可避免地享受着计算机科学中一些伟大思想所带来的惠及,而这些思想的本源则都诞生于上个世纪80年代。 当你搜索一个包含数十亿份文档的资料库,从中选出两到三份与你需求最相关的文档时;当你成功地完成了一次在线交易,即便同时有成千上万名消费者在同时访间一台服务器时;当你是通过微信将数兆的照片或视频压缩后传递给好友时;当你在手机上通过语音指挥着这个智能设备帮你完成一项任务时;以及当AlphaGo在棋盘上落子战胜人类围棋冠军时;你是否思考过这些令人印象深刻的壮举背后所依赖的伟大发现? 绝大多数计算机和互联网用户每天都会重复运用由这些创新想法所带来的新奇技术,却从来没有意识到背后的这些伟大思想! 这些伟大的“思想”到底是什么?计算机科学家们将它们形容为“算法”。 那么,究竟什么是算法呢?这一问题最简单的答案就是,算法是给计算机开出的一张精确处方,按顺序详细列出了解决一个问题所需要的具体步骤。 一个很好的例子就是我们小时候在学校里面学到的一种“算法”:将两个数字进行相加。这个算法涉及一连串如下步骤:首先,将两个数的最末位数相加,写下结果的最末位数,将剩下的数放到左侧的下一栏;接着,将下一栏的数相加,再将除结果末位数之外的数字和前一栏余下的数相加……”。依此类推。 算法的步骤近乎于机械化的感觉。事实上,这正是算法的关键特点之一:每一步都必须绝对精确,没有任何人类意图或推测掺杂其中。这样,每一个完全机械化的步骤才能被编写入计算机中。算法的另一个重要特点是,不管输入什么,算法总能运行。我们在学校学到的加法算法就拥有这一特性:不管你想把哪两个数相加,算法最终都会得出正确答案。比如,用这一算法将两个长达1000位的数相加,你肯定能得到答案,只不过这需要的时间会相对长点。 把算法定义为一张精确、机械化的处方的说法,你也许会略感好奇。这张处方究竟要有多精确?要进行哪些基本操作?比如,在上面的相加算法中,简单地说一句“把两个数相加”是不是就行了?还是说我们要在加法表上列出所有个位数字?这些细节看起来也许有点乏味,甚至会显得有点学究气,但其实离真相不远了:这些问题的真正答案正处于计算机科学的核心,并且也和哲学、物理学、神经科学以及遗传学都有联系。 有关算法究竟是什么的深层问题都归结于一个著名论题:邱奇-图灵论题(Church-Turing Thesis),从这个论题可以导出计算的理论极限。这一点我们后面再通过文章详细叙述。 现在你应该大致知道算法是什么了,接下来可能会问算法和计算机又有什么联系呢?这个问题中的关键点是:计算机需要用非常精确的指令编程。在能让计算机为我们解决某个特定问题之前,我们需要用一种特定的便成语言(比如C 或Java)为那个问题开发一个算法,然后放到计算机上去执行。 计算机科学中的伟大思想指的就是如何解决特定问题所使用到的算法,这些伟大的算法让计算机成为你指尖上的精灵。 一个伟大的算法由什么构成?JohnMacCormick在他的一本《改变未来的九大算法》的书中给出了一份清单:
为什么要着重于计算机科学的理论呢?部分原因是由于普通人对计算机科学的肤浅认知。有一种广泛的观点认为:计算机科学基本上就是编程(如“软件”)和设计(如“硬件”)。事实上,最优美的计算机科学思想中有许多是十分抽象的,并不属于以上任意一类。通过着重于这些理论思想,可以让更多的人将计算机科学的本质作为一门知识学科来理解。 John MacCormick在他的书中给出了他认为的9种伟大算法:
每当我们仰望星空的时候,那些我们曾经学过的少量天文学知识极大增强了我们对大自然的感受,让我们对伟大的宇宙产生了一种满足和惊奇的感觉。希望你在了解了算法之后,在你使用计算机时也能获得同样的满足和惊奇之感,并吸引着你探索计算机科学中的伟大思想,用算法来驱动你指尖上的精灵。 点击“阅读原文”有《改变未来的九大算法》一书的试读章节。 本文转载于微信公众号: 嘉数汇(Datahui),更多微信文章请扫描关注公众号: |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|