算法小时代:从数学到生活的历变(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-04 11:20:38

点击下载

作者:瑟格·阿比特博

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

算法小时代:从数学到生活的历变

算法小时代:从数学到生活的历变试读:

前言

算法,令人沉醉,令人忧

算法,已经成为我们工作、社交、医疗、工业、运输、贸易等活动中的重要组成部分。各种算法正改变着自然科学和人文科学,帮助我们丰富知识。算法让技术不断突破“不可能”的极限。

有一些算法,例如手机操作系统、数据库管理系统或搜索引擎,都极其庞大,成千上万的人对此做出了贡献。有时候,人们会把算法比作大教堂,因为它们包含着同样强烈的野心与疯狂。

随着算法的诞生,智人似乎终于制造出了一种可以实现一切愿望的工具。

但是,算法也令人担忧:某些制造业消失了,归根结底是算法摧毁了这些职业;保险公司应赔偿事故中的受害者,然而一个“冷酷无情”的算法降低了赔偿金额;股市暴跌,算法是这场灾难的操盘手;法律限制公民自由,政府用算法监视我们;在国际象棋或围棋大赛上,算法击败了人类,机器很快将凌驾于我们之上。

我们为什么要指责是算法带来了这些磨难?就因为算法打乱了我们原本的习惯?或许吧。但还有另一个原因:人们经常使用算法,却不了解它们的本质是什么,又是如何运作的。人们的种种幻想和担忧正是无知的结果。我们畏惧算法,是因为觉得它们神秘莫测,具有超自然的力量,甚至拥有邪恶的意图。

为了摆脱这种不可思议的想法,从幼稚的幻想中分析出一点合理的期望,摆脱毫无根据的畏惧,让担忧变得有理有据,我们邀请读者一起在算法的世界里旅行。在这段旅程中,我们会遇到如今这个算法当道的时代所面临的一些主要问题,如工作方式的改变、产业的消失、隐私保护,等等。

成也算法,败也算法。但我们绝不该忘记,算法自身是没有任何企图的。它们由人类设计,我们希望算法是什么样的,它们就会以什么样的姿态呈现。谈话一“你好,机器人,请给我解释一下什么是算法。”“好的。但与此同时,我还会告诉你算法、计算机和程序之间的联系。”“我知道。当我们找到一种算法时,需要将它写成程序的形式,而我们对计算机的要求也不只是单纯地为我们工作。”“完全正确。”“有了算法,一切皆有可能吗?”“并非如此……但是,无限的可能或许就是算法极具魅力的原因吧。”什么是算法?

想理解什么是算法,我们要先设想一个场景。几千年前,一位祖先凭着他对已故祖母如何做面包的记忆,尝试自己做面包。但是,他真的不知道该怎么做。他犹豫着,一开始先将麦仁放入沸水中,然后对自己说,这也许是个糟糕的想法。这位祖先的困境,正是我们都会面临的情况——遇到某一个问题,却又不知道该如何解决。我们想着解决方法,去尝试,反复探索实验,顺便有了一点点意外发现,直至成功……或者失败。

然而,真正的面包师并不是这样做的。他们不会给每炉面包都重制一个烘焙食谱,因为他们已经掌握并牢记了面包的烘焙方法。多亏了面包食谱,面包师可以每天给我们提供面包。事实上,人类文明的发展不仅源于有些人的发明创造,也因为另有人“复制”了这些发明,才使其得以改进。

但是,我们忘却了面包食谱的宝贵之处。首先,食谱降低了不确定性:多亏了它,面包师知道,除非突遭一场灾难,否则面包将会在晚餐时准备好。有了这个食谱,不需要什么想象力或是天赋,任何人都可以做面包。就拿两位作者来说,我们对面包烘焙没有任何天赋,但仍可以从网页上找到恰巴提的食谱,运用适当的和面力度,借助更富有想象力和才华的面包师们写下的方法,做出面包。最终,这个食谱成为了人类遗产中的一部分,在几千年的历史长河中,代代相传。

食谱就是一个算法,我们就此有了“算法”概念的初步定义:一个算法是解决一个问题的进程。我们并不需要每次都发明一个解决方案。

从这个定义不难看出,自人类历史初期,我们就一直在发明、使用和传播着各种各样的“算法”,用来烹饪、雕琢石器、钓鱼、种植扁豆及小麦,等等。进程和符号

有些算法与面包食谱不同,它们能解决书写符号的问题,例如数字、字母等。算法汇集在一起,形成蕴含不同含义的数目、词语、句子及文本。

例如,二分查找算法的用途是在字典中搜索某个特定词。二分查找法从字典中间开始查找,对比目标词与中间词的位置,根据目标词位于中间词的前或后,来选择字典的前半部分或后半部分作为新字典,然后再用二分查找法继续查找,以此类推,直到找到目标词为止。这一算法解决涉及一种书写符号——字母的问题。还有一些算法可以实现加法、减法等,解决涉及另一种书写符号——数字的问题。这类算法被称为“符号算法”。

计算机科学家往往将“算法”一词的含义限定为此类“符号算法”。考虑到这种限制,自然,我们就不能将算法的历史追溯到文字发明之前了。然而,广义上的算法概念其实与文字同样古老。从迄今人类所发现的最古老的书面踪迹表明,古代书吏已经开始使用算法了,例如用于记账的加法和乘法。文字可能就是因此而发明的。算法和数学

数学家们从很早便开始关注算法的设计了。比如,大约公元前 300 年的欧几里得算法可以计算两个整数的最大公约数。我们简单说明一下。读者若是在攀登数学高峰时感到吃力,大可以直接跳过这一段,或把以下内容当作一首深奥的诗,尽量去理解。

一般来说,一个算法会在输入端接收数据,这些数据构成了算法的参数。在欧几里得算法中,输入数据就是两个不为零的整数,设为 a 和 b,且 a 大于 b,例如 a 等于 471,b 等于 90。通常,算法会在输出端返回另一些数据。在欧几里得算法中,输出数据是一个整数,即 a 和 b 的最大公约数。

将欧几里得算法应用在整数 471 和 90 上,即有:用 90 和 21 替代 471 和 90,然后用 21 和 6 替代,接着用 6 和 3 替代,再用 3 替代,这时 3 即为所求。

在上述例子中,算法的每一步都需要计算 a 除以 b 的余数 r,随后用被除数 b 替代除数 a,余数 r 替代被除数 b。因此,由 471=5×9 + 21 可知,471 除以 90 的余数为 21。在第一步中,第一个数 471 被 90 替代,而第二个数 90 则被余数 21 替代,以此类推。但有一个例外:当余数为 0 时,就停止计算,且数 b 即为最终结果。这种情况出现在上述例子中的最后一步:我们用 6 除以 3,余数为 0,那么 3 即为所求。

算法也是中世纪西方数学家所关注的核心问题。数学家们引进了印度 - 阿拉伯数字,以及与这种数字系统配套的算法。其中一本著作是通晓阿拉伯语的波斯数学家穆罕默德· 穆萨· 花拉子米在 9 世纪撰写的《印度计算法》(Algoritmi de numero indorum)一书。“花拉子米”(al-Khuwārizmī)一名源自作者的出生地花剌子模地区,今属乌兹别克斯坦。有文献证明,自 1230 年起,花拉子米这个名字就成了“算法”(algorithm)一词的来源。用语言来表达

算法会自然而然地运用到与数学有关的对象上。其实,人类的一切活动中都有算法的身影,算法概念涉及到方方面面。但我们要先解决一个关键问题:如何描述算法?

假设我们想从巴纽火车站到达位于卡尚镇的巴黎萨克雷高等师范学院。几十个学生和教师每天早上都走同一条道路:首先沿着杜邦皇家大道走,接着是布里昂城堡大道。在不知不觉中,他们可能就用到了算法——一种从火车站到校园的程序。

谷歌地图提供了这个算法的图形形式:

同时也有一个文本形式:

如果我们给一个大学生解释这个算法,用一个简明扼要的方式就能表达清楚,但如果要给一个小孩子解释,就需要更详尽的细节。因此,讲解算法的方式是一个社会学问题,取决于谈话对象和谈话对象拥有的常识水平。

同样,欧几里得算法也可以用文字形式表达:计算 a 除以 b 的余数 r,当 r 不为 0 时,用 b 替代 a,用 r 替代 b,继续计算 a 除以 b 的余数 r,当余数 r 为 0 时,b 即为所求。

维基百科又提供了一种图形表达式:

所以,一种算法可以有不同的语言表达形式。然而,有一种表达形式不依赖于语言。一名学生没睡醒就去了校园,走起路来晃晃荡荡,就像在梦游,他运行的这个随机算法没有任何语言表述。还有一个例子能更好地说明这一令人困惑的现象。蚂蚁寻找食物时,使用了非常复杂的算法,在空间里进行定向。侦察蚁开始随机浏览蚁穴四周。当其中一只蚂蚁发现食物的时候,便会在返回自己蚁群的一路上留下跟踪信息素。受到跟踪信息素的指引,其他路过此区域的蚂蚁会沿着这条路径前行。当蚂蚁带着食物返回蚁穴时,也会一路留下自己的跟踪信息素,以增强轨迹信息。

如果有两条路径都能到达同一个食物源,那么在同一时间内,沿最短路径行走的蚂蚁往返蚁穴与食物之间的次数将比沿着长路径走的蚂蚁更多。于是,前者也会留下更多的跟踪信息素。这时,最短路径的信息将会更强,也越来越具有吸引力。跟踪信息素是有挥发性的,如此一来,被冷落的最长路径最终会消失。

蚁群利用一个复杂的算法确定了最短路径。早在蚁学家用语言记下这种现象之前,蚂蚁就很好地运用了这个进程。

确切地说,人与蚂蚁之间的区别在于,我们会尝试用语言表达、存储、传输、理解和改进算法。然而,我们有时也会用到不知该如何用语言表达的算法。比如,我们很容易就能辨认出猫和狗,却难以解释是如何做到的:是计算腿和耳朵的数量呢?还是观察头的形状或毛发的纹理呢?

我们的大脑和身体会用很多算法来思考、运动、做事,但不管是符号算法,还是其他算法,我们并不总知道如何解释。指令序列之外

从巴纽火车站到高等师范学院的算法可以表示成一个包含四个基本动作的逻辑序列:“取道东南方,向上朝着兰斯街的杜邦皇家大道”“然后……”“接着……”“再然后……”。欧几里得算法表达式中也出现了一些基本指令,比如赋值:“用 b 替代 a”。此外还有将这些指令封装成逻辑序列的句法结构,比如“这样做,然后那样做”,以及循环体,比如“当某条件为真时,重复此操作”。我们还可以添加条件测试语句:“如果此条件为真,那么这样做。”

这种方式听起来有点不寻常。事实上,只要很少的句法结构,就足以表达所有的符号算法,例如上述四个句法结构:赋值、逻辑序列、循环体、条件测试语句。算法的宝贵之处并不在于其组成有多么复杂,而恰恰在于这种将几个简单成分封装在一起的方式。

这就好比化学分子:数十亿个化学分子组成了我们所熟知的几十种化学元素;而这些化学元素本身仅由三种基本粒子——质子、中子和电子组成。

然而,尽管构建算法的基本元素在理论上非常充足,人们却很少从头开始构建算法:算法往往由其他一些已知的算法构成。例如,我们用算法描述了从巴纽地铁快线站到高等师范学院的路线。如果我们现在想从卢森堡公园到达校园的话,那么一个简单的算法就是:先乘坐地铁快线从卢森堡站到巴纽站,然后再运用先前的算法——这个算法被看成是一个整体。此时,一个全新的算法就这样形成了。我们并不清楚先前算法的细节,而是把它视为一个新的基本指令。算法和数据

能够解决符号信息问题的算法,更注重这些符号信息的呈现方式。例如,为了更好地执行加减乘除运算的算法,用阿拉伯数字形式的算式 123 × 456,比写成罗马数字的算式 CXXIII × CDLVI 更好。同样,在字典中查找单词,用字母表查找比用象形文字查找更简单。

寻找从一个点到另一个点路径的算法,同样在意数据的表达形式。如果某个城市的地图像照片一样,一个像素接一个像素地被给出,那就很难找到想要的路径。最好可以用综合的方法去描述,比如整合各个十字路口,通过连接街道,赋予每一段路一个长度。这样一来,与其费力地从一个像素移动到另一个像素,不如从一个十字路口跳到另一个十字路口的算法来得轻巧。算法的方法

已知的算法有很多,例如“分治法”“枚举测试法”“贪心算法”“随机算法”等。“分治法”是把一个复杂的问题拆分成两个较为简单的子问题,进而两个子问题又可以分别拆分成另外两个更简单的子问题,以此类推。问题不断被层层拆解。然后,子问题的解被逐层整合,构成了原问题的解。高德纳曾用过一个邮局分发信件的例子对“分治法”进行了解释:信件根据不同城市区域被分进不同的袋子里;每个邮递员负责投递一个区域的信件,对应每栋楼,将自己负责的信件分装进更小的袋子;每个大楼管理员再将小袋子里的信件分发给对应的公寓。■ 高德纳高德纳(又译唐纳德·克努斯)生于 1938 年,是著名的计算机科学家,也是现代算法的先驱之一。他的系列巨著《计算机程序设计艺术》在计算机科学界享誉多年。多年前,高德纳对现有的数学文本处理工具感到不满,于是创建了自己的工具 TeX 和 Metafont。如今,这两个工具成为广泛应用的免费软件。很多著名的算法都以他的姓氏命名,如克努斯 - 莫里斯 - 普拉特算法、罗宾逊 - 申恩 - 克努斯算法、克努斯 - 本迪克斯算法。“枚举测试法”列举出待解决问题的所有可能解,然后逐一进行检验,最后从中找出符合要求的解。举个例子,一位旅行推销员必须依次访问几个不同城市拜访客户,他通常会寻找几个城市之间的最短回路,来安排自己的旅程。寻找最短回路的算法旨在计算所有可能的回路。例如有 10 个客户,依次拜访 10 个客户共有 3 628 800 种回路组合方式,分别计算每种组合方式的回路长度,然后选择最短的那条。

当枚举测试法所需的计算量太大时,使用“贪心算法”能够找到一个合理的解决方案,使问题结果最优化。比如,当旅行推销员有 20 位客户要访问时,用枚举测试法可能需要测试超过 2 兆条可能的路线。与其这样一个个枚举,不如就地运行另一个算法:推销员每次都从当前所在城市选择去往距离自己最近的下一个城市,以此类推。这个算法会选择当前最短距离作为计算的公里数,而且,永不退回到曾经选择过的路线上。一般来说,贪心算法找到的解决方案可能不是最好的,但却是“合理的”。

我们之前见过一个使用“随机算法”的例子:为了找到食物,侦察蚁从随机浏览蚁穴四周开始。同样,许多其他算法也用到了随机源。比如,“蒙特卡洛算法”能确定正方形内一个复杂图形的面积:在正方形中随机抽取一个点,就像扔飞镖一样,飞镖落在哪个点就取哪个点;大数定律告诉我们,这些点落入复杂图形内的频率接近于复杂图形面积和正方形面积之比。机器学习

我们要讨论到的最后一个方法是“学习程序”。学习做面包、在字典中查找单词,人类对此习以为常。但很多人可能想不到,算法也可以学习。就像面包师每天能从自己的工作中学习、提高一样,算法也可以从重复相同的任务中学习、进步。

音乐、视频、图书分享平台上使用的“推荐算法”就是一种会学习的算法。系统程序会向用户推荐:“如果你喜欢《亚瑟王》,那你应当也喜欢《彼得·格里姆斯》。”提出这样的推荐,系统并不是基于1亨利·珀塞尔和本杰明·布里顿之间的联系 。简单地说,系统的判断是基于对之前用户的听歌记录的分析:事实上,那些听过《亚瑟王》的用户之中,确实有很多人也听了《彼得·格里姆斯》;或者,算法尝试寻找一些我们可能并不认识,但品味却与我们接近的用户。在这两种情况下,算法学习、发现、统计了歌曲之间或者用户之间的相似性。从这样的学习程序出发,算法可以预测用户可能喜欢什么样的音乐,并因此会忍不住收听或者购买其他哪些作品。

1亨利·珀塞尔和本杰明·布里顿分别为歌剧《亚瑟王》和《彼得·格里姆斯》的作曲家,布里顿的作曲风格深受珀塞尔的影响。——译者注

这些会学习的算法有助于我们重新审视自身的学习方式。推荐算法既没有认识到珀塞尔和布里顿之间的联系,也不需要拥有任何专业的音乐史知识。它只是对用户的选择进行观察,并从所见所闻中学习。事实上,这与一个孩子学习母语的过程没什么两样——从观察周围说话的人开始,然后用大量时间去模仿,不需要理解语法、动词变位和动宾搭配的问题。一个小孩知道应该说“我去学校”,而不是说“我走学校”,却无法解释为什么。正如推荐算法会向用户推荐本杰明·布里顿,却不能解释为什么用户可能喜欢这个作曲家。

有些学习程序的问题很难解决。假如我们要识别物体,如一只狗、一只猫、一张桌子,等等。在一张图像中,数据以像素的形式呈现,通过统计分析图像中的黑色或者蓝色像素点,很难区分这是一只狗还是一张桌子。这时,必须使用更复杂的学习算法——深度学习算法。深度学习算法首先尝试从图像中找到直线、圆、爪子、腿、桌脚……然后再寻找越来越复杂的物体对象。算法同样也是逐步建立越来越抽象的图像表达,最终找到被识别的物体。难点是,算法如何知道需要识别哪一种元素?是爪子、腿,还是桌脚?没关系,算法会通过自身的经验进行学习。例如,深度学习算法可以让下围棋的程序取得巨大进步,打败最优秀的人类围棋选手。算法、计算机和程序

从早期文字出现开始,人类使用符号算法至今已有五千年的历史了。那么,符号算法这个概念为何会突然闯入当今公众的热议中?为了弄清原因,除了算法,我们还应该关注其他一些事物——计算机和程序。

计算机在人类世界中占据的位置引发了越来越多的恐惧和幻想。焦点主要在“计算机”和“机器人”这两个词上,直到最近,人们才把目光转移到“算法”一词上来。人们害怕的,不再是计算机科学或计算机,其实,令人生畏的是这些东西所拥有的“自主意识”。计算机算法

前面已经说过,使用算法的主要好处在于,我们可以让它们不假思索地执行命令。人类一旦学会了在字典中查找单词、做加法运算、计算两个数的最大公约数、根据医学临床检查结果诊断病情,执行这样的任务时就不再需要太多的想象力和才能——只需运用学过的“算法”。这样一来,我们能够利用自己的想象力和才能去做一些其他的事情,如发明新的算法。

在字典中查找单词、两数相加,这些任务都可以“机械式”地执行。用机器代替人类去执行这些任务,听起来离实现梦想仅有一步之遥,但人类却花了五千年去跨越这一步。

第一台机器可以追溯到古代,比如亚历山大港的希罗发明的蒸汽机是对水进行操作的,并不用于做加法运算和乘法运算。而算法和机器则一直属于不同的文化领域:当美索不达米亚的书吏提出了第一个用于加法和乘法运算的算法时,这些计算是通过人工而不是机器完成的。早期的机器

为了让机器执行符号算法,人类花费了很长时间来开发必要的技术。算盘和一些计算图表能帮助人们执行算法,但它们不会独自进行计算,所以不可能被看成“机器”。因此,早期有能力运行符号算法的机器恐怕只有教堂里的钟了。教堂时钟的出现可以追溯到中世纪末期。就拿法国的第戎教堂来说,每隔一小时,教堂的钟就会自动敲响;再比如,斯特拉斯堡大教堂的时钟上有座圣母雕像,在雕像前,每个小时都会出现《圣经》中东方三贤士前来朝拜的场景,钟楼上的风信鸡也会拍打翅膀。同时,这个时钟计算着行星移动的位置,显示非固定节日的日期。

到了 17 世纪,继大教堂时钟之后,契克卡德和帕斯卡等人陆续发明了用于计算的机器。这些机器只能执行加减运算,精致的机械常常会卡住。紧接着,莱布尼茨发明了可以运行乘法和除法的机器。到了 18 世纪,沃康松发明了机器人。19 世纪,雅卡尔和福尔肯发明了提花织布机。此后,何乐礼发明了打孔卡片制表机。到了 20 世纪,在第二次世界大战爆发前夕,出现了恩尼格玛密码机(Enigma)和莱布尼茨密码机,轴心国军队用来加密和解密情报。此后,英国人制造了“炸弹”密码破译机(Bombe)和“巨人”计算机(Colossus),专门用来破译恩尼格玛和莱布尼茨这两台密码机的编码;也就是说,破译机在不知道密钥的情况下解密情报。

但是,这些机器都算不上是真正的计算机,即使它们已经有了计算机的一些属性,但仍然缺乏一个要素——通用性。与只有单一功能的电动剃须刀和电动绞肉机不同,计算机是一台多功能的机器。此外,计算机应当是一种通用机,不仅能执行某几种算法,而且还应能执行所有可能的符号算法。实际上,它是一台“万能机”。而在之前提到的机器中,没有一种具有这种通用性。

19 世纪,阿达·洛芙莱斯和查尔斯·巴贝奇在工作中提出了通用性的概念。但直至 20 世纪 30 年代,经过阿兰·图灵和阿隆佐·邱奇的努力,这个概念才真正被理解。而仅过了 10 年,即在 20 世纪 40 年代,人类就制造出了第一台通用机。这就是早期的计算机。

很难说,究竟哪一台才算是第一台通用机。诞生于柏林的 Z3 计算机,诞生于美国费城的电子数字积分计算机(ENIAC),此外还有诞生于曼彻斯特的小型试验机 Baby,在 20 世纪 40 年代,这三台计算机都宣称自己是历史上第一台计算机。

正是凭借这种通用性,如今计算机才能无处不在。在公司里,计算机帮助我们进行财务核算;在家里,它让我们享受音乐、保存旅行照片;开车时,它引导我们顺利通过错综复杂的单行道。

但是,通用性也导致各种事物之间的界限变得模糊——现在,已经没有真正意义上的电话、照相机、手表或者音乐播放器,所有功能都被同一个事物代替,一种可以随身携带的“掌上电脑”,有人称之为“手机”,有人称之为“移动电话”,只是说法稍有不同。

在制造出第一台计算机后不久,人们将计算机投入到网络中,也就是说,将这些相互独立的计算机联系起来,建立越来越复杂的信息系统。到了 20 世纪末,计算机已经成为每个家庭都可以负担得起的商品。

当算法时代来临的时候,保险公司采用了一种“冷酷无情的算法”,计算支付给事故受害者的赔偿金。于是,一些人抱怨世界变得不人道了。他们不但指责计算赔偿金总额的方法,还指责负责计算的机器——计算机。算法和计算机是相辅相成的,不能分割。

因此,我们今天所看到的世界的根本性转变,并不完全源于五千年前算法的发明,还源于执行算法的机器的诞生,源于计算机所引发的科学技术与信息技术的大发展。机器语言

为了使用通用机,我们需要向它指出,希望它在特定语言下运行何种算法。这种特定的语言被称为“编程语言”。在这种语言描述下所做的算法即为“计算机程序”,或简称为“程序”。接下来,我们以一个用 Java 语言编写的程序作为例子,这个程序表示了欧几里得算法:r = a % b ;while (r != 0) { a = b ; b = r ; r = a % b ;}

程序通常比算法表达式包含了更多的信息,因为程序需要明确许多细节:用于计算最大公约数的两个数值要由用户确定;要明确这两个数需要由键盘键入,还是从文件中读取;计算求得的结果需要在屏幕上显示,还是写入另一个文件中;程序需不需要用到他人编写的库;数据要以怎样的方式表示,等等。数字化信息

计算机仅在符号数据上执行算法。然而众所周知,计算机还可以存储、传输数据,转换图像、声音、视频。这里并没有格式符号。那么,计算机是怎么做到的呢?

例如,计算机以序列符号的形式表示图像,这通常最接近图像的原始状态。为了用一系列符号表示一张图像,可以将图像分割成有限数量的矩形,这些单个的矩形被称为“像素”。将每个像素简化成一个单颜色的像素,就构成了一级近似。假如取一组有限数量的颜色,并将其中的每种颜色对应一个像素,这就构成了二级近似。通常,一张照片包含了几百万像素,每个像素相当于从一个包含 1600 万种颜色的调色盘中选择一种,作为照片的颜色。有了这些颜色值,我们的眼睛就无法分辨这是一张没有被像素化的真实图像,还是一张以符号形式表示的图像。有时候,人们能察觉到这是一张被像素化的图像,那是因为这张图没有被足够的像素点去填充。每个像素的颜色由一个 24 位的序列表示。因此,一张 1000 万像素的图像可以表达成一个 2.4 亿位的序列,即 30 兆字节。一台数码相机将实际图像转换成摄影师在取景器中看到的用符号形式表示的图像。这种图像可以被存储、传输、转换。这类设备能对图像执行复杂的算法。有些算法可以在模拟图像,即没有被像素化的图像上被实现,但是,另一些算法实现起来就太复杂了。■ 比特、字节、拍字节衡量信息量的基本单位为“比特”,又称“位”。一个消息中所包含的信息是以二进制的形式表示的,如 0 和 1。因此,只用 1 比特就足以解释“白天”或者“夜晚”,用 3 比特就可以组成 8 种不同的消息:000、001、010、011、100、101、110、111。于是,3 比特足以表示星期,例如,000 代表“星期一”,001 代表“星期二”……110 代表“星期天”。由于历史原因,人们经常会使用导出单位。“字节”就是一种导出单位,1 个字节等于 8 比特。凭借这短短的 8 比特,我们可以表示 256 种不同的消息,由此足以代表字母表里的任一一个字母,甚至包括字母大小写、法语中带重音符号的元音、数字、标点符号等 100 多个字符。1000 个字节组成了“千字节”,1000 个千字节组成“兆字节”,1000 个兆字节组成“吉字节”,1000 个吉字节组成“太字节”,1000 个太字节组成“拍字节”…… 1 个拍字节等于 8000 万亿比特。说到这里,你是不是已经被绕晕了呢?为了能让大家理解数量级的概念,我们举个例子:一页文档包含了几千字节的信息量,一本书包含的信息量有几兆字节,一个小型图书馆的藏书包含了几吉字节的信息量,法国国家图书馆里收藏的文本信息总量有几太字节之多,欧洲核研究组织每年产生的信息量高达几拍字节。

另外,声音也可以用符号近似地等价表达。用符号表达声音并不是一件新鲜事。乐谱就是把声音分割成音符,再表达出来的。音符能表示一定范围内的音高和持续时间,这也是一种近似值。因此,作曲家们非常清楚,要写出火车的鸣笛声和蓝矶鸫的叫声,有一定难度。

计算机将对图像、声音、视频等事物的表达视为一系列的符号。数字是表达信息的常用符号,仅用数字 0 和 1 就能对图像、声音、视频进行表达;随后,这些符号被称为“数字化”的图像、声音等。于是,这种现象就被称为图像、声音的“数字化”。因此,人们也常用“数字化”一词形容算法时代的世界。信息的数字化开辟了巨大的可能性,它让对图像、声音等的存储、传输、复制、研究、分析、转换等处理成为了可能。多样性和通用性

计算机不仅将算法应用在文档类的符号信息上,还应用在如图像这样的数字信息上。并且,计算机还能与物理世界相互作用。例如,如果我们接好设备的接口,就可以控制自动和面缸的马达,来制作面包。同理,计算机也被安装在火车、汽车、飞机、拖拉机等运输工具上。稍微夸张一点说,现代的汽车堪称是配备了一个发动机和四个轮子的小型计算机网络。车载计算机能控制一切——燃料喷射系统、车速变档、制动,等等;同时还能扮演着向导的角色,即使是在一座偏僻的村庄里,外部计算机网络提供的实时交通路况,也能帮助我们避免交通拥堵。

同样,电视机、照相机、手机、手表、音乐播放器、电子阅读器、机顶盒都是计算机……有专门用途和通用的配置的机器貌似使用起来更方便。数码相机包含图像处理程序,而电子阅读器就不存在这种功能。但是,照相机和电子阅读器都有信息处理器,处理器属于通用机范畴。各种设备的功能貌似非比寻常,高度地专业化,而且,我们必须遵循由程序设计师提供的解决方案,不能擅自在设备上加载其他程序。尽管如此,这些设备其实都是在通用机的基础上创造的。

为了理解机器的多样性,我们可以关注一下所谓的“机器人”。机器人首次亮相于 1921 年,在一台由卡雷尔·恰佩克编写的舞台剧《罗梭的万能工人》(R.U.R.)中,那些“人造人”被称为“机器人”(robot)。现在,家用机器人可以帮我们做饭或干家务。工业上使用的机器人更为先进,且高度专业化。有的机器人具有功率大的特点,有的操作精度非常高。虽然,像电影《星球大战》中 R2D2、C3P0 或 BB-8 这类机器人仍只存在于科幻小说中,但仿人机器人已经越来越完善,有能力自主执行“高水平”的任务,比如踢足球或者跳舞。

除了家用计算机,还有成千上万靠电池养活的计算机被“圈养”在计算机“大农场”中,这就是数据中心。

我们被五花八门的计算机包围着,每种计算机都在用自己的方式改变着个人环境和工作环境。但是,尽管存在着差异性,这些计算机却都基本保持着通用机的特点。

我们也可以用许多不同的方法来实现计算机。比如,法国里昂高等师范学院的学生们就用乐高制作了一台图灵机。有的研究人员尝试从其他生物体技能中寻找灵感,设计更多类型的机器人。更有研究人员试图利用量子物理学定律,来构建截然不同的计算机。■ 艾兹格·迪科斯彻艾兹格·迪科斯彻(1930—2002)是一位荷兰计算机科学家,计算机科学领域的先驱者之一。他一生中有很多重要的贡献,特别是在编程语言、算法设计、分布式计算等方面。迪科斯彻以自己的名字命名了一种计算最短路径的算法,而“最短路径问题”是图论研究中的一个经典算法问题。迪科斯彻还以“难搞”的性格而闻名,有人觉得他难以相处。他有一些名言,例如:“测试是用来表明 bug 的存在,而不是不存在。”另一句名言是:“计算机科学并不只是关于计算机,正如天文学并不只是关于望远镜。”但最后这句话并不是迪科斯彻说的。事实上,它应该出自另外两位计算机科学家,迈克尔·费洛斯和伊恩·帕伯里。算法有什么用处

算法和计算机处处都有用武之地。但是,它们具体有什么用处?通用性衍生出了各种奇妙的用途。计算

纵观历史,计算机最初是用来进行计算的。早在计算机发明之前,人们就给计算一词下了定义:用于转换数据,尤其是数字。求解方程、加密或者解密消息等算法,其实都属于计算功能。管理信息

但人们很快就意识到,计算机还有其他用途:存储、查找、更新大量信息,例如编制图书馆目录、公司客户名单等。在某种程度上,信息管理使用的算法相对简单:在目录中搜索一本书的标题,并不比在字典中查找一个单词更复杂。但从数据处理量的角度来看,这里确实应该使用计算机,况且我们还要保护信息不因硬件故障而受损,因为对于整个用户群体来说,信息数据可能十分重要。对数据加以归档、保存的算法,也属于信息管理类算法。通信

数据归档功能随时间不断迁移信息,与此不同的是,有些算法会在空间内迁移信息,例如发送电子邮件所使用的算法就是这种情况。信息在空间迁移中不会被修改。然而,想要有效地共享一个拥有数十亿计算机网络上的信息,就需要复杂的算法,如“通信协议”中著名的“网际协议”(IP)。

计算机网络正在逐步取代邮政网络、手机网络、广播电视网络。信息技术和电信的大融合也许是人们始料未及的现象:在 20 世纪 60 年代的一些科幻小说里,地球居民在 2000 年开着会飞的汽车,但仍然在电话亭里打电话。探索

我们还是从高等师范学院的校园出发,这次想去东京宫,最快的办法是搭乘公共交通工具,算法可以帮助我们找到最短路径。当我们寻找把 3000 个纸盒整理到集装箱里的最佳方式时,算法也是找到最佳分配方法的必不可少的工具。

最短路径或最佳分配方式的算法大致上以相同的方式运行:在选择之前,算法会搜索大量的路径或纸盒的分配方式,这就是探索和测试算法。当有过多的组态需要探索时,为了避免对所有方法逐一尝试,此时会使用贪心算法等试探法。数据分析

每一季度,法国国家统计及经济研究所都会公布国内生产总值的增长情况。数据分析算法汇集了如营业额指数、车辆登记、海关统计等大量指标,最终计算得到这一结果。

数据分析在科学研究领域的应用日益增加。例如,图像分析可以对星系进行自动分类;再如,对《圣经》段落中的一些词汇的出现频率加以分析,可以确定该段落的作者。

在日常生活中,搜索引擎提供了可选择的搜索结果。电影推荐、图书推荐、合作伙伴推荐……网页选择展示的广告内容,都基于对搜集数据的分析结果。当我们使用这些服务时,就会留下相关数据。网络和手机上网服务的发展推动了大量数据的产生。人们已经学会如何用大规模并行的计算机对数据进行分析,这就是大数据功能。信号处理

算法处理的一部分信息来自传感器,这类传感器用于测量物理量,比如温度、压力、亮度等。测量结果在时间或者在空间中发生变化时,就会构成“信号”。例如,声音是在一定时间内空气压强的变化,图像是亮度在空间内的变化,等等。

信号可以通过模拟的方式表达。比如一种压力传感器——传统麦克风,将声音转换成电信号,电流的变化类似于压力的变化。与之不同的是,数字麦克风将声音转换成一系列数字,也就是转换成一系列符号。用电信号表达的声音可以通过专用设备被放大、转换。同样的信号如果用数字方式表达,就能被算法和计算机处理。

改变声音、图像等事物的表达模式,会大大改变这些信息的处理方式。例如,胶片相机含有一种复杂的滤镜装置。这种装置引导每一束光线聚焦到负片上的某个特定点,少了它,图像将会产生畸变——被拍摄的直线在照片上会变成曲线。数码相机则不需要这样的组件,它由几亿个光传感器组成。如果光线落在错误的地方,算法能够进行畸变校正。摆脱了复杂的组件后,数码相机比胶片相机要便宜得多。因此,大家喜欢随身携带一个数码相机。

使用通用机、计算机,而不是专门的机器去处理信号,也有助于降低处理成本。20 世纪的新手音乐人要花一大笔钱,才能建立一个工作室,创作出自己的第一张唱片。而现在,只要一个数字麦克风、一台普通的计算机和一个信号处理软件,就能得到接近专业录音室录制出的音质。

数码摄像机、数码相机、数字麦克风、计算机和信号处理软件,让从前专业人员的专享工具走入寻常百姓家。它们实现了无数艺术家的梦想。想当年,法国“新浪潮”电影运动中的艺术家们就曾试图寻找用最轻便的摄像机和最便宜的制作方式,来实现实景电影的拍摄,但始终难以如愿。控制对象

算法通常利用传感器提供的信息来控制对象。举个例子,当算法应用在无人驾驶车的时候,不仅要处理乘客提供的信息,比如乘客想去的目的地,还要处理车上配备的多摄像头提供的信息,以便了解路况。

这些算法常常还要具备实时计算的特殊功能:当遇到红灯的时候,算法应该不仅能够启动刹车制动,还必须是立刻做出反应,而不是等到一分钟之后才启动制动。制造商品

算法被用于工厂里的自动化生产,在一端输入原材料,在另一端输出商品。每个环节的机器都由一个算法控制,而整个生产过程由另一个算法监控,如此便可以自动化生产商品,比如说手机——20 世纪的手机并没什么复杂性可言。

这些工厂里仍然保留着一些人工作业,确保机器正常工作,或者对机器进行必要性的维护。但相比 19 世纪和 20 世纪初的工厂来说,自动化生产工厂基本上相当于无人操作。建模与仿真

我们理解世界的基石是理论,如牛顿力学、相对论、进化论等。当一种理论进行了预测并通过观察得以证实的时候,这种理论就是“科学的”。例如,牛顿力学预测了地球上某一点的日出和日落时间。人们可以对比预测的时间和实际观测的时间,如果这两个时间不一致,那说明理论出现了问题。

某些理论可以用算法表达,例如计算太阳系中行星运动轨迹的算法。这种算法理论被称为“模型”。鉴于其自身的算法性质,模型就是用计算机对相关现象进行“模拟”。人们已经开发了许多现象的模型,如大气和海洋的演变、脑功能的运转方式、板块运动、城市发展、股价变化、人口流动,等等。

牛顿力学等经典理论往往基于为数不多的几个方程。模型则更复杂,涉及面也非常广泛。例如,城市发展的模型必须考虑人口的发展过程,以及经济、政治、地理等影响因素。

鉴于这种复杂性,一些现象即使尚未被充分理解也可以被建模和模拟。牛顿经典物理学家掌握方程,一步一步推理和解释结果。而气象模型极其复杂,我们不可能遵循所有计算,从中简洁地解释结果。这类模型能以较高的正确率对天气进行预测,告诉我们明天是否会下雨,但不会解释下雨的原因。

原则上,模型应当和理论一样受到同样的约束:模型的预测结果应该与观测结果一致,否则模型就是不正确的。然而,由于模型的复杂性,我们不得不重新审视“不正确”这个词的含义。当理论的预测结果与观测结果不一致时,理论就应该被放弃,或至少需要重新审查。但是,一个复杂模型的预测依赖许多参数,若只与某些观测结果有“轻微”出入,我们就不会放弃这个模型。当预测结果和观测结果出入太大时,我们会尝试引入新的参数,这会让模型更复杂一点。因此,存在缺陷的模型很少被放弃——当预测结果与观测结果不同时,我们尝试对模型加以改进。算法模型让人们陷入了一个自相矛盾的情况:算法模型可以研究比经典理论复杂得多的现象,所以,它们代表了科学领域的一个延伸;但是,难以对算法模型的结果进行解释,也就很难对其预测结果和观测结果加以比较,模型的科学性就会减弱。

到此为止,我们对日常使用的几类算法进行了简要概述。不同类型的算法通常共同应用在同一个系统中。例如,在一列无人驾驶的火车上,一些算法控制着火车的行驶速度,另一些控制门的开关,还有一些控制交通管理。概述全面展示了传统算法的多姿多彩,而人们还在通过完善已有算法和设计新算法,不断丰富着算法世界。算法做不到的事

算法虽然常常被人们诟病,但有时也会被高估。为了充分理解算法在当今世界所占据的位置,了解它们的局限性也非常重要。计算上的限制

20 世纪 30 年代,雅克·埃尔布朗、库尔特·哥德尔、阿隆佐·邱奇、阿兰·图灵、斯蒂芬·克莱尼、埃米尔·波斯特等数学家的研究工作描绘了能被算法解决的问题的特点。数学家们的结论或许会让你感到惊讶,这类问题与用来描述算法的语言并无关联。我们选择迥然不同的语言,却总会落入同一类问题里。所以我们更加确定,算法概念独立于表达算法的语言。

算法可以解决的问题,是所谓的“可计算性”或“可判定性”问题。相反,算法无法解决“不可计算性”或者“不可判定性”问题。这可能会令人感到不安,但即便动员世界上所有的程序员想法解决这个困境,也无济于事——毫无成功的希望。

就算不去证明是否存在“不可判定性”问题,我们也能解释为什么有些问题是无法判定的。想象一下,一群孩子在玩寻宝游戏:第一个线索引导他们来到苹果树下;在那里,他们找到第二条线索,引导他们到谷仓里;在谷仓里,他们找到第三条线索……孩子们走过一段不可预知的道路,从南到北,再从北到南,一直把他们带向距离出发点很远的地方,也说不定。

我们可以很容易地回答以下问题:孩子们在游戏前五步中发现宝物了吗?我们只要跟随提示信息走完五个步骤,就足以判断这些信息是否能带领孩子们找到宝物。而另一个问题就比较难回答了:“孩子们能否在行程结束前找到宝物?”但我们仍可以找到答案:跟随线索直到找到宝物;或者,直到行程的尾声仍一无所获。

这个方法能帮我们回答问题,只是因为我们知道,游戏行程有一个终点。寻宝游戏的组织者们不可能不厌其烦地提供无止境的线索,这实在不合理。

想象一下,假如这就是一场没有终点的游戏:我们从家里出发,按照当前所在位置的信息,让算法来决定下一个目的地;随后,我们询问这条道路是否会带我们到达罗马;我们可以用与寻宝游戏相同的方法,尝试回答这个问题,然后去往下一个目的地;每到达一个目的地,我们就会询问:是否已经到达罗马?我们可能会在到达第五个目的地或第十个目的地的时候发现自己来到了罗马。但是,我们也有可能一直在徘徊,一个目的地接着一个目的地,永远没有到达罗马的那一天。我们没有任何办法知晓会在哪天到达罗马,甚至没办法判断自己是不是处于永无止境的徘徊之中。我们唯一能做的,就是去往下一个目的地。■ 阿兰·图灵阿兰·图灵(1912—1954)是英国天才数学家和计算机科学家。图灵在职业生涯早期发明了图灵机,提出了一种优雅的计算机模型。这种模型催生了“邱奇 - 图灵”论题,建立起“可计算性”问题的概念。在第二次世界大战期间,他为破解德国的恩尼格玛密码机做出了巨大贡献。这项工作对于盟军走向胜利具有重大意义。战后,图灵继续对早期计算机进行研究。他提出了一种人工智能化的测试方法,名为“图灵测试”。这个测试的基础是,判断计算机程序是否具有通过假扮人类而骗过人类的能力。在人生的最后几年,图灵从生物形态角度为生物学做出了重要贡献。1952 年,图灵因同性恋问题被起诉。他被迫接受化学阉割,以避免牢狱之灾。1954 年 6 月 7 日,他在曼彻斯特的家中被发现死于氰化物中毒,很可能是自杀。直到他死后五十多年,英国政府才重新恢复他的名誉,承认他是战争英雄的事实。

当人们试图通过转化程序来创建新程序时,经常会遇到不可判定性问题。例如,“编译器”是用来翻译程序语言的程序,它将人类编写的一个程序翻译为另一个可以直接被计算机运行的程序。在通常情况下,编译器尝试通过删除无用的程序块,生成最短的程序。但这个问题是不可判定的:任何算法都无法确定某个程序块是否有用。于是,编译器运用试探法排除某些无用的程序块。但仍无法保证,编译器没有遗漏其他无用的程序块。运算时间

所幸,我们在日常生活中遇到的往往都是可计算性问题。然而,一些问题虽然是可计算的,解决问题的算法却需要大量的运算时间,结果,这些问题在实际中还是无法解决。

如同地理学家测量山之高、河之长一样,计算机科学家试图衡量所遇到问题的“复杂性”,也就是算法解决问题所需的时间长度。

我们曾经提到过旅行推销员的问题,推销员必须拜访身处几个不同城市的客户。他通常会寻找几座城市之间的最短回路,来安排旅程。对这个问题加以变形,例如,他只想寻找一个不到 500 千米的回路。算法会枚举所有可能的回路,并逐一测试,这需要大量的运算时间:10 位顾客需要测试 3 628 800 条回路;20 位客户需要测试超过 2 兆条回路……于是,回路数量、运算时间随客户数量的增加呈指数增长。因此,这个算法在实际中只能被用于客户数量很少的情况。

是否存在一个快速算法,确定存在一个给定长度的最长回路?这类问题名为 NP 完全问题,写为“P ≠ NP ?”,即 P 是否等于 NP。这是一个超过 40 年都未解决的问题。克雷数学研究所将该问题列入“世界七大数学难题”,任何能找到问题的一个解的人,都能获得 100 万美元的奖金。在 NP 完全问题中,P 类问题是指能快速被解决的问题,而推销员问题属于 NP 类。因此,这类问题的答案一旦被找到,就能很快被验证。例如,一旦找到一条回路,就很快能验证它是否小于 500 千米。如果我们能证明 P = NP,则说明存在一种未知的算法,可以快速解决推销员问题的变形。如果我们能证明 P ≠ NP,则说明没必要再执着地寻找这种算法——因为它根本不存在!其他资源

如果说,运算时间通常是最缺乏的资源,其他资源也会限制算法和计算机解决问题的能力,比如,用来存储信息的存储空间,或者计算所消耗的能源。能源常常是宝贵的资源,比如对于需要用一块小电池来运转的手机来说。同时,我们经常还要考虑实现一个算法或开发一款程序所需要的时间。我们罗列这些因素是为了说明,有时候用算法也不能解决问题,算法不能替我们解决所有问题。可靠性

如果我们想从巴黎前往法兰克福,某个路径搜索算法可能显示这两座城市之间没有火车往来,但事实上是有的。同样,当我发短信给恋人时,短信可能会错发到我祖母的手机上。算法可以包含错误,软件和硬件都可能发生故障。

这些被称为“bug”的漏洞并不是计算机系统所固有的,即便最有经验的驾驶员也会犯错误而引起重大交通事故。但是,计算机系统出错的频率更高,因为这些系统是人类创造出的最复杂的东西——自行车不过由上百个机械零件组成,而手机操作系统的程序拥有千万行代码。计算机系统如此复杂,程序开发时间也越来越短,我们不得不感到惊讶,它们居然大都可以正确运行!

各种 bug 所带来的问题的严重性也不同。公共汽车时刻表的手机应用程序无法运行时,我们还可以从相关网站上获取信息;或者,在车站老实等着就行。短信发送给错误的收件人,问题会更麻烦一点。但是别忘了,在软件控制的飞机起飞之后,或者当外科医生机器人做手术时,我们就把自己的性命交到了算法的手心里。更有甚者,假如控制核电站的算法没有正确运行,后果可能是灾难性的。

在交通、医疗卫生和能源等关键领域里,人们会全力以赴排除漏洞。比如,我们可以做到让自动驾驶仪犯下的错误少于有血肉之躯的人类驾驶员。但是,单单在这些关键领域上努力是不够的,我们对计算机系统的要求比对人类的要求更高。

计算机技术领域的某些研究致力于方法的设计,以避免出现 bug,从而为算法建立起一种信任模式。方法各式各样,不仅涉及开发团队的结构,也涉及测试方法的设计和程序的分析。一般来讲,程序分析不由当初写这个程序的人来完成,分析包括校对代码、理解代码、证明程序的指定属性是否与技术规范相符。

比如我们曾提到过,在字典中搜索某个词的二分查找算法:算法从字典中间开始查找,对比目标词与中间词的位置,根据目标词位于中间词的前或后来选择字典的前半部分或后半部分作为新字典,然后再用二分查找法继续查找,以此类推,直到找到目标词为止。假如我们想在由 apartment、apology、apparent、apparition、appeal、 appendix、appetite、applause、apple、zoo 这 10 个词组成的字典里寻找“apple”一词,首先会选择字典的后半部分列表“appendix、appetite、applause、apple、zoo”,第二步选择列表“apple、zoo”,然后第三步找到目标词“apple”。

这个算法的技术规范是:如果单词是按字母顺序在词典中排序,且搜索词确实是在字典中,那么算法就能找到搜索词。为了证明算法符合这一属性,我们需要证明在每个步骤中,字典列表的大小都会减少,且如果搜索词在初始列表当中,那么它也会存在于被选择的列表中。如果算法是错误的,比如选择了错误的那部分列表,那么我们会通过证明算法的正确性,发现问题。在这里,“证明”一词与逻辑和数学上的“证明”具有相同的意义。

当然,计算机科学家试图通过其他程序来证明当前程序的指定属性符合技术规范,而不是自证。

借此,我们有可能在程序中排除大量的 bug,大大提高了程序的可靠性。然而,尽管有这些预防措施,仍然会有一些 bug 从眼皮下溜走,比如技术规范本身携带错误——完美不属于这个世界,零缺陷是个幻想,我们只能尽可能减少错误的发生。

当发生问题时,程序仍要尝试运行,只不过在降级模式下运行。例如,服务器崩溃时,另一台机器将作为副本服务器,避免服务中断。

苛求完美也是有代价的。飞机或无人车的自动驾驶仪就值得为此付出高昂代价。不得不承认,开发这样的系统需要耗费大量时间和资金。而对于一个用途相对较小的免费应用程序来说,能更快地提供服务显得比可靠性更重要。这往往导致某些软件的质量很差,就好比一块钱买的小风筝经常在第一阵风刮起的时候就破了,这也没什么好埋怨的。安全性

安全性与可靠性截然不同,但同样也会对算法的使用构成限制:飞机因为喷气式发动机出现故障而坠毁,这是一个可靠性问题;飞机因为罪犯在飞机上放置了一个炸弹而坠毁,这就是一个安全性问题。

对于计算机系统来说,安全性是抵御恶意攻击的属性。恶意攻击的人试图控制或访问并非供其所用的信息。计算机系统的安全性在很大程度上依赖于信息的加密方法。

当一个网站的安全性不足时,黑客就有了可乘之机,控制网站,改造网站提供的信息。假如有两家竞争的香水品牌,其中一家信息系统安全性较差,那么竞争对手就可以趁机窃取该公司正在设计的香水配方。一场“黑帽黑客”与“白帽黑客”之间的战争即将爆发:“白帽黑客”是指保护计算机系统的安全专家;而“黑帽黑客”则是试图找到系统漏洞,并趁机攻击的一群人。

这场战争还扩大了到政治层面上:计算机蠕虫被用来打击核设施,朱利安·阿桑奇等“黑客行动主义者”向公众散播机密文件。■ 朱利安·阿桑奇朱利安·阿桑奇是澳大利亚计算机科学家和社会活动家。他建立了网站“维基解密”(WikiLeaks)——leaks 其实是“泄露”的意思。在这个网站上,阿桑奇公开了数以百万计的机密文件,这些文件有时是阿桑奇自己或他的朋友通过“黑客”行为窃取而来的。公开美国在伊拉克行动的机密文件为他招来了与美国司法部门之间的大麻烦。“维基解密”揭露的秘密让很多人无比尴尬,例如某些非洲国家的高级政治领导人。自 2012 年开始,阿桑奇在厄瓜多尔驻英国大使馆寻求政治庇护,以避免被美国引渡和监禁。与人类的互动

限制算法的最后一道难题是人类与算法之间的对话。从里约热内卢飞往巴黎的 AF447 航班坠入大西洋。

人为因素在这起事故中似乎负有重大责任,特别是,飞行员与计算机之间的对接界面遭到了质疑——人类飞行员似乎对计算机呈现的数据产生了误解。

人类和算法之间互动的问题还从未引发过如此严重的后果。其实,人机互动不利,往往是计算机系统操作失败的重要原因。很多读者此时也许会想起,自己在面对不友好的交互界面时,总有气得想拔光自己头发的冲动。

在大多数情况下,我们只能去适应机器,但本应是它们来适应我们!无论如何,人机交互正在不断取得进步,看看我们的手机界面就知道了。计算机思维

一场科技革命带来的不仅是新的知识,还会引发新的思维方式、新的提问方式和新的回答方式。

在 17 世纪初的科技革命爆发之前,假如有人提出一个问题,比如血液是否在体内循环,他会从祖先留下的文献中寻找答案:亚里士多德和盖伦告诉我们,血液不在体内循环,于是问题的答案就找到了。亚里士多德和盖伦如何知道自己到底知道些什么?这个问题不存在。反正他们比我们更博学,对后人来说这就够了。

但是,这种回答问题的方式从 17 世纪初开始逐渐被抛弃。此时出现了两种新的方式:数学和观察。当伽利略用望远镜观察天空时,发现观察结果与当时的天体理论不符——木星周围有四颗卫星环绕。威廉·哈维观察到,调节伤者手臂上止血带的松紧能使出血量产生变化,于是发现血液是在人体内循环的。他们不仅带来了新知识,还带来了提问和回答的新方式。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载