首页 存档 技术 查看内容

算法:指尖上的精灵(计算机科学中的伟大思想是如何诞生的?)

2018-3-30 13:00 |来自: 互联网 305 0

摘要: 20世纪30年代,在第一台数字计算机发明以前,一位英国天才开创了计算机科学领域。之后,这位天才继续证明,不管未来建造的计算机运行多快、功能多强大、设计得多好, 仍旧有一些问题是计算机不能解决的。 1948年,一 ...


  • 20世纪30年代,在第一台数字计算机发明以前,一位英国天才开创了计算机科学领域。之后,这位天才继续证明,不管未来建造的计算机运行多快、功能多强大、设计得多好, 仍旧有一些问题是计算机不能解决的。

  • 1948年,一位供职于电话公司的科学家发表了一篇论文,开创了信息理论领域。这位科学家的工作让计算机能以完美的精确度传输信息,即便大部分数据都因为干扰而被破坏。

  • 1956年,一群学者在达特茅斯举行了一个会议。这次会议的目标很清晰,也很大胆,那就是开创人工智能领域。在取得了许多重大成功以及经历了无数失望之后,人们仍期待出现一个真正的智能计算机程序。

  • 1969年,IBM公司的一名研究人员发明了一种能将信息有效地组织到一起的先进方法。目前,绝大多数在线交易都使用该方法存储及检索信息。

  • 1974年,英国政府下面一个通信实验室的研究人员发明了一种能让计算机安全通信的方法,随后三名美国的研究人员独立开发并拓展了这项重大发明,为今天互联网上所有的安全通信打下了坚实的基础。

  • 1996年,两名斯坦福大学博士生决定联手搭建一个互联网搜索引擎。几年后, 他们联合创办了一家搜索引擎的公司,互联网时代的一个数字巨头从此诞生。

  • 2006年,刚加入Yahoo!的一个工程师带领着一个团队,开发出一个分布式信息处理系统,为日后大规模数据的存储与计算开辟出一条光明大道。

  • 2017年,一个叫做Master的神秘棋手把围棋界搅得天翻地覆,有人惊叹潘多拉的盒子已经被打开,人类的前途未卜。

今天,当我们使用最为时尚的手持设备、消费各种各样的信息服务时,都在不可避免地享受着计算机科学中一些伟大思想所带来的惠及,而这些思想的本源则都诞生于上个世纪80年代。


当你搜索一个包含数十亿份文档的资料库,从中选出两到三份与你需求最相关的文档时;当你成功地完成了一次在线交易,即便同时有成千上万名消费者在同时访间一台服务器时;当你是通过微信将数兆的照片或视频压缩后传递给好友时;当你在手机上通过语音指挥着这个智能设备帮你完成一项任务时;以及当AlphaGo在棋盘上落子战胜人类围棋冠军时;你是否思考过这些令人印象深刻的壮举背后所依赖的伟大发现?


绝大多数计算机和互联网用户每天都会重复运用由这些创新想法所带来的新奇技术,却从来没有意识到背后的这些伟大思想!


这些伟大的“思想”到底是什么?计算机科学家们将它们形容为“算法”

那么,究竟什么是算法呢?这一问题最简单的答案就是,算法是给计算机开出的一张精确处方,按顺序详细列出了解决一个问题所需要的具体步骤。

一个很好的例子就是我们小时候在学校里面学到的一种“算法”:将两个数字进行相加。这个算法涉及一连串如下步骤:首先,将两个数的最末位数相加,写下结果的最末位数,将剩下的数放到左侧的下一栏;接着,将下一栏的数相加,再将除结果末位数之外的数字和前一栏余下的数相加……”。依此类推。


算法的步骤近乎于机械化的感觉。事实上,这正是算法的关键特点之一:每一步都必须绝对精确,没有任何人类意图或推测掺杂其中。这样,每一个完全机械化的步骤才能被编写入计算机中。算法的另一个重要特点是,不管输入什么,算法总能运行。我们在学校学到的加法算法就拥有这一特性:不管你想把哪两个数相加,算法最终都会得出正确答案。比如,用这一算法将两个长达1000位的数相加,你肯定能得到答案,只不过这需要的时间会相对长点。


把算法定义为一张精确、机械化的处方的说法,你也许会略感好奇。这张处方究竟要有多精确?要进行哪些基本操作?比如,在上面的相加算法中,简单地说一句“把两个数相加”是不是就行了?还是说我们要在加法表上列出所有个位数字?这些细节看起来也许有点乏味,甚至会显得有点学究气,但其实离真相不远了:这些问题的真正答案正处于计算机科学的核心,并且也和哲学、物理学、神经科学以及遗传学都有联系。

有关算法究竟是什么的深层问题都归结于一个著名论题:邱奇-图灵论题(Church-Turing Thesis),从这个论题可以导出计算的理论极限。这一点我们后面再通过文章详细叙述。


现在你应该大致知道算法是什么了,接下来可能会问算法和计算机又有什么联系呢?这个问题中的关键点是:计算机需要用非常精确的指令编程。在能让计算机为我们解决某个特定问题之前,我们需要用一种特定的便成语言(比如C 或Java)为那个问题开发一个算法,然后放到计算机上去执行。

计算机科学中的伟大思想指的就是如何解决特定问题所使用到的算法,这些伟大的算法让计算机成为你指尖上的精灵。


一个伟大的算法由什么构成?JohnMacCormick在他的一本《改变未来的九大算法》的书中给出了一份清单:

  • 第一,也是最重要的一条标准是,伟大的算法要被普通计算机用户每天用到。

  • 第二,伟大的算法应该能处理具体的现实问题,如压缩一个特定文件或通过一个噪声信道精确地传输文件。

  • 第三,这些算法要和计算机科学的理论相关。

为什么要着重于计算机科学的理论呢?部分原因是由于普通人对计算机科学的肤浅认知。有一种广泛的观点认为:计算机科学基本上就是编程(如“软件”)和设计(如“硬件”)。事实上,最优美的计算机科学思想中有许多是十分抽象的,并不属于以上任意一类。通过着重于这些理论思想,可以让更多的人将计算机科学的本质作为一门知识学科来理解。

John MacCormick在他的书中给出了他认为的9种伟大算法:

  • 搜索引擎中的索引算法

  • 网页排名(PageRank)算法

  • 公钥加密(public keycryptography)算法

  • 纠错码(error correcting codes)算法

  • 模式识别(pattern recognition)算法

  • 压缩算法

  • 数据库一致性算法

  • 数字签名算法

  • 最终的极限算法(算法的极限)


每当我们仰望星空的时候,那些我们曾经学过的少量天文学知识极大增强了我们对大自然的感受,让我们对伟大的宇宙产生了一种满足和惊奇的感觉。希望你在了解了算法之后,在你使用计算机时也能获得同样的满足和惊奇之感,并吸引着你探索计算机科学中的伟大思想,用算法来驱动你指尖上的精灵。


点击“阅读原文”有《改变未来的九大算法》一书的试读章节。


本文转载于微信公众号: 嘉数汇(Datahui),更多微信文章请扫描关注公众号:

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部