Upgrade to Pro — share decks privately, control downloads, hide ads and more …

不插电的技术

 不插电的技术

谷歌课程

Avatar for John Yang

John Yang

April 20, 2013

Other Decks in Technology

Transcript

  1. 1 不插电的计算机科学 不插电的计算机科学(Computer Science Unplugged,简称 Unplugged 项目) 是 Tim Bell,

    Mike Fellows and Ian Witten 领导的一个非赢利性项目,在很多国家 都有捐助者 (包括新西兰、 美国、 瑞典、 澳大利亚、 中国、 韩国、 台湾和加拿大) 。 团队包括的成员或关键组织的成员有 ACM K-12 委员会、ACM 课程委员会、 CSTA(CS 教师协会),也包括那些将此项目作为他们研究的校长、教师、大学 outreach coordinators,研究生等。它链接到 Google 赞助的 CS4ALL 项目(UW、 CMU 和 UCLS),并将为一些项目提供资源和支持,如 NCWIT(National Center for Women & Information Technology , 妇 女 与 信 息 技 术 国 家 中 心 ) 和 TECS(Teacher Enrichment in Computer Science,计算机科学教师强化)。现在正在 建立一个国际顾问团队为该项目提供指导, 包括 K-12 教育的代表 (小学和中学) , 专业团队(如 ACM、CSTA),国际捐助者(如 Google、Microsoft)。 Unplugged 项目在全世界已经实施超过 16 年了,可以在教室、科学中心, 家里,甚至是公园的游园活动中进行。其主要目标是将计算机科学(以及通常的 计算)作为一种有趣的、迷人的、智力上刺激的学科,从而向年轻人推广。该项 目希望激发人们的想象力, 并希望表达那些不依赖于特定软件或系统的基本原理 以及那些到 2020 年仍不会过时的概念。Unplugged 项目适合所有年龄段的人, 从小学到大学,可以跨越国界和文化背景。通过该项目可以实施踏平高科技教育 解决方案难以实施的障碍,跨越资讯富有和资讯贫乏之间、发达国家和发展中国 家之间的鸿沟。
  2. 2 目 录 活动 1 进位的计算--二进制数…………………………………………1 活动 2 数字表示色彩—图像表示…………………………………… 6

    活动 3 文本压缩……………………………………………………… 11 活动 4 卡片魔术—检错与纠错……………………………………… 14 活动 5 20 次猜测——信息理论……………………………………… 18 活动 6 战舰--搜索算法……………………………………………… 23 活动 7 排序算法……………………………………………………… 39 活动 8 敲钟——排序网……………………………………………… 45 活动 9 泥泞的城市—最小生成树…………………………………… 50 活动 10 橙子游戏--网络中的路由和死锁……………………………54 活动 11 寻宝——有限状态机…………………………………………57 活动 12 排序——编程语言……………………………………………65 活动 13 贫穷的制图师——图形着色…………………………………68 活动 14 旅行城镇——支配集…………………………………………77 活动 15 冰冻之路—Steiner 树…………………………………………82 活动 16 分享秘密——信息隐藏协议…………………………………91 活动 17 秘鲁人掷硬币问题——密码协议………………………… 94 活动 18 公钥加密…………………………………………………… 102 活动 19 巧克力工厂----人性化界面设计…………………………… 106 活动 20 计算机对话—图灵测试…………………………………… 115
  3. 1 活动 1 进位的计算--二进制数 重要概念 使用 2 为基数来表示数字 2 进位的表示模式和相互关系

    摘要 现代数字化计算机上所有的数据,几乎都是采用 0 和 1 的方式来储存和传送,这个活动 就是要展示如何只以两个数字〈0 和 1〉来表示所有的文字和数字。 专有名词 二进制表示法、二进制与十进制的转换、位与字节、字符集 图 1.1 二进制卡片的最初布局 图 1.2 翻开卡片显示五点 所需教材 每个小孩都需要有: 从图 1.5 剪下来的一组〈五张〉数字卡,图 1.6 的活动单和一支钢笔或铅笔。 适用年级:小学生以上 预设能力: 可以计算 15 或 31,并能进行配对与排序 所需时间:10 到 40 分钟 适用人数:从个人到整个班都可以
  4. 2 活动流程 1. 我们坐在孩子们可以看到你地方,并给每个孩子一套卡片。 2. 儿童可以像图 1.1 那样预订卡片, 留下点数为 16

    的卡片。 有些儿童会试图将卡片以反 方向排序放置,因此,你应该检查他们的数从左至右是以降序放置的。对于幼小的儿童,不 用使用 16 点的卡片。 图 1.3 图 1.6 工作表的解决方案 3. 我们让孩子们计算出翻转的卡片,以致五个点数都能确切显示出来。做这唯一(正确) 的方式是 4 点的卡片和 1 点的卡片相对,而其余的卡片都正面朝下(如图 1.2)。每张卡片要 么朝上显示所有的点数, 要么朝下什么也不显示。 我们准备一些新颖的方式获得五点--在八 张卡片里面通过使用其余的五张来覆盖三张的点数, 对于小孩来说, 按照规定的次数完成是 不正常的! 4. 现在我们让孩子们展示其它号码的点,以致于他们可以探索表示的号码。问他们一些 号码,如 3(需要卡片 2 和 1) 、12(需要卡片 8 和 4 ) 、19(需要卡片 16,2 和 1)等。对 那些很快找到号码组合的人, 我们问他们是否可以找到另一种方式获得该号码 (他们最终很 可能会发现显示每一个号码的出路只有一条) 。让他们讨论什么号码需要的卡片最多(答案 是 31 为 5 张卡片, 15 为 4 张卡片) 。那最小的呢?(通常数字 1 将第一被给出,但是这里 的正确答案是零。 )是否有任何数字在最小和最大的数字之间不能被表示?(没有--所有号 码可以代表,每个都具有独特的代表性。 ) 5. 对于那些年龄较大的孩子,我们问问他们在序列中如何显示数字 1,2,3,4,. . .,
  5. 3 看看他们是否可以计算出一个递增数字的程序以一次在卡片上显示 (如果您从右到左倒装所 有卡片,那么卡片数字的点将逐一增加,直到你将它翻转过来) 。 6. 这个部分的活动是要使用 0 和 1

    来表示纸牌是翻起或覆盖的状态,告诉学生我们使用 0 来代表纸牌是隐藏的、1 则代表纸牌是显示的,例如:图 1.2 的样版是 00101,你也可以给 其它的范例来试试看,例如:10101 代表 21、11111 代表 31,另外给学生一些练习,让他们 两者之间可以互转,你可以让一部份学生轮流说出自己的生日,并使用 0 和 1 来表示这个 日期,而另一部份学生则将这些以 0 和 1 表示的数字转换成原来的日期,这就是二进制的 转换,也就是以 2 为基底的数字表示法。 7. 请使用图 1.6 扩充练习上的工作表(完整的工作表请见图 1.3) ,这个工作表使用灯泡 的亮或暗来表示纸牌的隐藏与显示,灯泡亮表示纸牌显示,灯泡暗表示纸牌隐藏。前面的几 个题型应该非常容易完成,例如第一题是代表 8 和 1 的纸牌显示,所以代表 9。对于低于五 个灯泡的题型,学生应该使用前几个纸牌即可,例如在第二个题型中,只有使用三个灯泡, 从左到右对应的值分别是 4、2 和 1,让学生试试看是否可以自己完成所有的练习。 六个灯泡的问题刚好可以配合六张纸牌的问题, 每一张纸牌上的点数刚好是前一张的两 倍,点数分别是:1, 2, 4, 8, 16, 32, 64 . . . .,所以 32 点的纸牌刚好可以用来解决六张纸牌的 问题。 在工作表下面有一个使用 1-26 的数字来表示英文字母的对照表 (0 可以用来代表空白) , 学生必须先学会每一个数字所代表的英文字, 并且能找到对照表中的字母, 这个表格代表我 们可以将文字的讯息转换成一系列的 0 与 1,而学生们可以透过这种方法来传递编码过的机 密信息。 变换与拓展 在以下的练习中, 我们使用棒子的长度来取代纸牌的点数 (我们可以使用长度分别为 1, 2, 4, 8 和 16 单位的棒子来产生代表 0-31 单位的长度) ,或是使用重量来取代纸牌的点数(我 们可以使用重量分别为 1, 2, 4, 8 和 16 单位的东西来产生代表 0-31 单位的重量) 。 我们现在可以尝试使用高低音来取代如 01101 的顺序,高音频代表 1、低音频代表 0,这 个活动将会在教室中造成非常吵杂的结果, 但是学生们将印象深刻。 其实调制解调器和传真 机就是使用类似的音频技术来传递数据的,但是持续的高音音频将会造成类似撕裂的声音, 假如学生不熟悉这样的声音, 可以让他们尝试以电话拨打传真机, 他就可以听到这样的声音。 任一个有两种状态的对象都可以用来表示数字,图 1.4 显示我们可以使用各种不同的方法来 来表示数字 9(01001) ,有一个比较特别的方法是使用手指头,手指头向上代表 1、手指头 向下代表 0,我们使用 5 根手指头可以代表最大的值为 31,10 根手指头则可以表示最大到 1023,这样的表示法需要一点点的小技巧,因为它将会产生一些奇怪的姿势,其实真正的挑 战是使用脚趾头,这将可以让你表示超过一百万的数字(真正是多少呢?两只手可以表示 0 到 1023,手指和脚趾在一起可以表示 1024*1024=1048576) 。 中高年级的学生可能对于扩充 1, 2, 4, 8, 16, 32…的顺序会有极大的兴趣,这样的顺序存 在着一个非常有趣的关系: 假如你将右边的数字累加到左边, 总和将会永远比下一个数字少 1。 二进制有另一个非常有趣的性质那就是:你只要插入一个数字 0 在该数字的最右边,就 会产生 2 倍的效果,例如:1001(9)的倍数是 10010 (18),中高年级的学生应该可以自己解释 这样的现象代表什么(因为所有原来是 1 的位数值,现在都是原先的 2 倍了,所以总和变成 原来的 2 倍,相同的效果也会发生在 10 进位上,如果插入一个 0 在该数字的最右边,就会 产生 10 倍的效果) 。
  6. 4 图 1.4: 表示数字 9 的一些其他方法 二进制数的概念可以被运用在猜数字的游戏之上, 我们可以透过如: “该数字大于或等于 X

    吗?”的问句达成,例如我们知道该数字小于 32,我们可以继续问“该数字小于 16 吗?” 来逐步达成猜数字的游戏。活动 5 将有更详细的描述。 使用 5 个数字可以表示所有的英文字母,但是如果要加上大小写那就不够使用了,你可 以让学生算算看计算机到底需要多少不同的字符来表示才足够 (包括小数点、 逗点和一些特 别的记号如$等) ,并且结论是要多少字符才能够储存所有的字符(两组英文字母、10 个数 字和一些标点符号,全部已经超过了 64 个,所以需要 7 个数字才足够使用,但是 7 个数字 可以表达 128 个字符, 已经非常足够了) , 目前大多数的计算机内部使用 ASCII 来储存数据, 每一个字符使用 7 个位来表示。 相关知识 现在的数字计算机几乎全部都使用上述的方式来表示信息,这样的表示方式称为二进制 制,因为只有采用了两个不同的数字来表示,这也可以称为以 2 为基底的表示方法(这和一 般人所熟知的以 10 为基底完全不同) 。每一个 0 或是 1 称为位(bit,它是 binary digit 二进 制数的缩写) , “位”通常被用来表示计算机主存储器的地址,它是透过晶体管的开或关以及 电容器的充电或放电来表示不同的相位。 在软式或硬式磁盘中, 位则是透过磁盘片表面上磁 场的方向来表示,不是南--北就是北--南。CD--ROM 则是透过光学的反射来表示,它运用 光的反射与否来表示 0 与 1。而当数据要透过电话线或无线电来传递时,必须先将数据以高 音频和低音频来表示 0 或 1。 一个位可能无法表示太多数据,所以我们必须将这些字节合起来使用,我们常以 8 个位 来表示数据,8 个位可以表示 0--255 的数字,8 个位我称之为字节。 位不但可以表示数字,我们也可以拿它来表示文书处理文件中的字符,一个位通常被用 来表示一个单一的文字字符, 所以数字 0--255 就可以拿来表示所有的大小写英文字、 数字、 标点符号和一些特殊符号。 为了要表示更大的数字,我们会将更多字节合起来使用,两个字节(16 位)就可以被用 来表示 65536 个不同的值,四个字节(32 位)可以表示超过 40 亿个不同的值。计算机的运 算速度会受到它一次可以处理位数多少的影响, 例如32位计算机一次可以进行32位的运算, 而 16 位的计算机因为每次只能进行 16 位的运算,所以它必须将比较大的数打散成 16 位的 量,所以这样会造成速度变慢。 一般来说,我们无法直接看到计算机上的位和字节,因为它们在显示时已经自动转换成 字符和数字。但是,位和字节的观念,在计算机上用来储存数字、文字和其它讯息时,仍然 是非常重要的一种观念。
  7. 5 补充读物 大部分的计算机简介书籍都会讨论到二进制的数字系统,在 Gareth Powell 所写的“My friend Arnold’s book of

    Personal Computers”一书第二章中,有完整的二进制数的介绍。 图 1.5 说明:复制此页的卡片,并按着框图剪下图案,使两套这样的 5 张卡片。 图 1.6 说明: 计算出本页顶端电灯代表的数字。 此外, 在本页底端有一个二进制代码的消息; 在表中查找相关信息并计算出数字。
  8. 6 活动2 数字表示色彩—图像表示 关注焦点 表示方法 着色 图 摘要 图画、 照片及其他的图片都可以存储在计算机中,

    本课程讲述计算机如何有效地使用数 字来表示图片。 专有名词: 光栅图像,像素,图像压缩,行程编码(run-length coding) ,传真机 所需教材 每个学生要发一张填空图(详见图 2.1,形式如下图) ,铅笔、橡皮 图 2.1 填空图 适用年级:小学生以上(至少 7 岁) 预设能力: 可以计算初级数学 所需时间:10 到 40 分钟 适用人数:从个人到整个班都可以
  9. 7 教师需要准备如图 2.2 的幻灯片,也可以将其画在黑板上。 活动流程 1. 跟学生一起讨论传真机是如何进行传真的(在本次课程前最好安排学生先使用传真 机进行收发) ,计算机在什么情况下需要存储图片(例如:画图程序,游戏或多媒体等) 。

    接下来,向学生说明计算机智能存储数字(学过活动 1--二进制数的学生对这一点会有 所了解) ,建议学生让计算机只使用数字来表示图片,看看他们如何做到。 2. 我们如下解释计算机屏幕式如何显示图片:计算机屏幕被划分为许多小点,称之为 像素。“像素”是“图像元素”的简称,在黑白屏幕上,每一个像素不是黑就是白。图 2.2 显示 了屏幕上字母“a”放大时的情况,可以看见组成的点。计算机在存储图片时,只需要存储哪 些点是黑色,哪些点是白色就可以了。 3. 我们以图 2.2 为例,说明图片怎样用数字表示,说明过程如下:写下第一行开始时连 续的白色像素数目(图 2.1 开始时只有一个白色的像素) ;然后是连续的黑色像素数目(3) ; 以次类推,知道整行被编码。 如此,第一行可以表示为 1,3,1。用这种方法将其余行都编好数字,例如第二行表示 为 4,1,即开始是 4 个白色的像素,接着是 1 个黑色像素。图 2.3 为图 2.2 的全部编码。注 意开始数字为 0 的行表示该行开头没有白色像素,第一个像素为黑色。 使用黑板进行说明可能比较困难,因为在黑板上难以分辨黑色像素 图 2.3 使用数字编码的图形 2.2 4. 让学生将图 2.6 进行解码。 解码后图片如 2.3,2.4 为缩小后的样子。 右边的 “test”比较容易,而左边的 “being”最为复杂,在方格内完成图像,由于十分容 易出错,所以最好使用铅笔。由于在填涂过程中表示黑色像素的数字十分容易出错,为了更 容易解码,我们可以将方格中的行和列编号,并将表示黑色像素的数字圈起来。 图 2.2 左为计算机屏幕上显示的字母“a” , 右图为其放大情形,可以清楚地看出组成的像素
  10. 8 图 2.4 放大图 图 2.5 压缩图 变换与拓展 将描图纸覆在网格上进行解码,最后完成图像时就没有网格,这样会使图像更为清晰。 学生还可以使用方形彩色贴纸或其它替代物来取代铅笔填涂网格。

    十字绣的图案也可以使用 这种方式编码。 学生可以在网格中自己设计图案(或照着计算机屏幕显示出的画) ,然后将其编码,再 让其他学生还原。 由于二进制数表示的长度有限,通常实际应用中,像素最大长度是有限的。我们可以向 学生提问, 让他们回答如何用 7 个格子来表示 12 个黑色像素 (一种方法是将 7 个格子涂黑, 再下一行紧接着 5 格黑色) ,如果将颜色使用数字表示(例如:0 表示黑色,1 为红色,2 为 绿色,等等)就可使用这种方法表示彩色图像。增加两个数字来表示一行像素,第一个水给 出像素的长度,第 2 个数字代表颜色。 相关知识 计算机中最简单表示黑白图像的方法是用 0 来表示白色,1 来表示黑色。通常图像中经 常会有大块的白色(特别是页边)和连续的黑色(如水平线) 。传真机中,每英寸有 100 个 像素,因此 7 英寸宽的页的一行开头的白色需要占用 700bit 存储量。 我们在课程中使用的“行程编码”方式更为有效, 只需用 10bit 就可以表示上例中需要 700 个二进制表示的图像。这个例子有一些极端,但也表明该方法可以显著节约空间。使用这种 节约空间的技术称为“压缩”,这也是计算机进行图像操作的关键。例如,一般来说,传真机
  11. 9 可以将图片压缩至原来的 1 7 。如果没有压缩技术,传真机需要花费 7 倍的时间进行传送, 这样会限制了传真机的使用。存储在计算机中的图像经常被压缩至 1 10

    甚至 1 100 ,有了压缩 技术,计算机能够存储更多的图片。存储动画时这项技术更为重要,因为动画中每秒包含了 25 张或更多图片。本课程所讲的压缩技术类似于大多数通用传真机使用技术。还有许多其 它压缩技术,一种是有损压缩,这种技术会轻微的改变图像以达到更好的压缩效果。压缩技 术会不会起反效果, 反而将图像扩大了呢?也存在这种情况。 假如有像国际象棋棋盘这样的 黑白间隔图像,直接使用像素表示黑白比使用数字编码更能节约空间,尽管这是一个假设, 但是一些真正的图像(如半调图像、向报纸上的插图等),由许多微小的点构成的图像,不能 很好地压缩甚至还会放大,因此,我们对这类图像表示方法的研究就显得十分必要。 补充读物 Netravali 和 Haskell 的 Digitalpictures: representation and compression 深入探讨了计算机 图像表示。 Hunter 和 Robinson 于 1978 年发表的“International digital facsimile coding standards”, 文 章叙述了传真机编码标准方法。 最新关于图像编码标准的书是 Pennebaker 和 Mitchell.的 JPEG: Still Image Data Compression Standard 。
  12. 11 活动3 文本压缩 关注焦点 写 抄 在写过的文本中反复写 摘要 尽管现代计算机大规模存储技术有了很大进步,设备的存储效率仍然非常重要。在 数据存储时对数据编码,读取数据时对数据解码,这两处虽然耗费了一些时间,但是可

    以很大程度上提高计算机的存储能力。本课程讲述了如何将文本进行编码以节约空间。 专有名词 文本压缩,Ziv-Lempel编码 所需教材 给每个学生发一张填空图,如图3.1所示。 教师需要准备一些诗歌或文章来给学生练习编码。 图3.1 说明:根据箭头指向,在每个空白框填写所指的字母 适用年级:小学生以上(至少 9 岁) 预设能力: 可以抄写文本 所需时间:大约 10 分钟 适用人数:从个人到整个班都可以
  13. 12 活动流程 1. 给每一位学生发一张填空图,并让他们来解码,即:将箭头所指向的字母填入空 格中,完成诗歌内容。例如,第一个空格应该填入字母e,第二行的第一个空格应填入 第一行的短语Pease porridge。填好后如下图。 图3.2 已完成的工作表 2.

    我们让学生自己找一些文本, 并使用箭头和空格表示, 使最后留下来的文字越少 越好。若空格的填充顺序是从上到下,从左到右,箭头应一直指向前面的部分,这样才 能保证能够解密。学生可以自己写一些文本,将其编码,也可以使用教师提供的文本。 因为许多儿歌和诗歌有许多重复的单词、短语或句子,所以它们都可进行有效的编码, 如Dr. Seuss’s 的书“Green eggs and ham”就是一个很好的素材。 变换与拓展 箭头与空格编码必须要使箭头总是指向前面的文本,例如,图3.3显示了单词 “Banana”的编码情况,尽管空格的箭头指向该单词本身,仍然可以按照从左到右的顺 序成功解码,对于有较长循环的字符或模式,采用这种自表达的方式编码很有用。 图3.3 自我参考复制的代码
  14. 13 在计算机中,箭头和空格都可使用数字表示,例如:图3.3可以表示为“Ban(2,3)”, 2表示第2个字符为第一个要抄的字符,3表示需要照抄3个连续的字符。解码过程如下: 图3.4 在计算机中,显然两个数字要表示两个以上的字符,如只用来表示一个字符,则没 有编码的必要。学生可以尝试采用数字表示法来进行编码和解码。 为了让学生更好的认识这种编码,可以发给学生一张印有文本的纸做练习,让学生 找出可以用数字来取代的部分,这些部分必须包含有两个或以上字母,因为若用两个数 字对一个字母进行编码不能节约空间,练习的目的是尽可能的将字母用数字表示。 相关知识

    计算机的存储能力正在以不可置信的速度增长,过去25年中,计算机存储量实现了 百万倍的增长,但是相对于存储需求,这种增长仍不够。计算机能够储存一本书的能力 提供了存储整个图书馆藏书的可能,可以显示高质量的图片意味着可以播放电影,具有 较高可靠性的CD-ROM取代了软盘存储分散数据和程序。 任何拥有计算机的人都会见证 Parkinson定律,即总有存不完的数据。 为了满足存储需要,除了购买更多的存储空间外,还可以压缩现有的数据。本课程 描述了压缩过程:改变数据的表达形式来节约空间。计算机会自动执行压缩和解压缩, 用户几乎不会意识到这个过程,他们只是注意到磁盘存储数据越多,从磁盘中读取文件 所需时间有了增加。计算机在存储和读取时也要耗费一些时间,有时系统使用压缩的文 件会更快,这是因为解压缩的时间要小于读压缩文件所节约的时间。 人们提出了许多压缩方法,其中普遍被采用的技术就是指向先出现重复的大块文 本,通常称这种技术为“Ziv-Lempel 编码”或LZ编码,是以色列的两个教授于20世纪70 年代到80年代所提出的。这种编码对许多数据都有效,它还可适用于西班牙语、英语, 甚至是日语这种使用完全不同的字母表组成的文字,这种编码应用于文本,因为文本中 有很多单词会重复出现,可以使用指针取代。典型的LZ编码压缩可以将数据减少一半, 通用的档案存储程序如Zip和ARC以及磁盘备份时都使用了LZ编码进行,高速modem也 使用了LZ编码, 当计算机通过普通电话线进行交互, 压缩技术可以减少电话线传输数据 来量,从而显著提高传输速度。 还有一种压缩方法是采用较短码长表示高频字(如Morse编码)。此外还有更好的 方法(所需时间更多),基于这种思想,我们可以凭借现有的几个字母时测出下一个字 母,这将在活动5中有所介绍。 补充读物 Bell, Cleary, Witten写的Text compressionby 以及Witten, Moffat , Bell写的Managing Gigabytes: Compressing and indexing documents全面介绍了压缩算法,这是面向大学计算 机科学的学生的。如果你对计算机编程感兴趣的话,还可以阅读Mark Nelson的The data compression book, 这是一本以应用为指南的书, Dewdney的Turing Omnibu在文本压缩这 一章还讨论了“Huffman coding”。
  15. 14 活动4 卡片魔术—检错与纠错 关注焦点 奇数和偶数 模式 小魔术 摘要 我们通常假定数据从一台计算机传送到另一台时总是正确的。然而,事实却不是这样, 会有一些意外发生,

    使数据发生改变, 这次课程使用一个小魔术来展示如何检查出这些错误 并进行纠正。 专有名词 检错码,纠错码,奇偶校验 所需教材 每两个学生需要一套约25张的相同的卡片,卡片具体要求在后面描述 为了向全班进行演示,教师需要一套约40张的带磁卡片和一块金属板 活动流程 这次课程通过魔术来教导学生, 在第一次演示时能够很容易的引起学生的兴趣, 然后再 告诉学生怎么变这个魔术。为了增强魔术的效果,可加入一些戏剧因素。学生的位置安排必 须使他们可以清楚的看到教师的动作。 表演这个魔术需要一叠同样的两面不同的卡片, 比如, 一面是红色,一面是白色,可以用一张大的单面有颜色的卡纸裁开制成;或是使用扑克牌。 为了便于演示,卡片应带有磁性,可以买一些磁条粘在卡片上。制作大约40张这样的卡片, 一半为正面,一半为反面。将卡片放在一块竖着的金属板上,以便演示给全体学生看,而当 学生表演时,可以让他们把卡片平放在面前的地上或桌子上。 1. 让一个或两个学生随意选择卡片排列成一个矩形,任何大小都可以,例如5X5(矩 形摆得越大,效果越好) ,卡片的排列方式任意,图4.1为一个示例: 图4.1 一张初始任意的5X5卡片排列 适用年级: 小学三年级以上 预设能力: 能够识别和数出小的奇数和偶数 所需时间: 大约30分钟 适用人数: 从一个人到全班都适用
  16. 15 2. 教师随意的增加一行和一列,使卡片排列看上去更为复杂(如图4.2) 。这一步是魔 术的关键,其方法是必须保证每一行和每一列中有颜色的卡片为偶数张。 图4.2 增加一行一列的卡片排列 3.找一个学生来翻动一张卡片,改变它的颜色。当学生翻卡片时,教师可以蒙住眼睛, 背对卡片,不去看学生是如何做的。例如图4.3,第4行第3章卡片被翻动了。然后,解放眼 睛,仔细研究卡片,并断定哪一张卡片被动过了。将其恢复后,可再找一些学生来做演示,

    使学生信服。这个魔术可以用任意多张的卡片做,卡片数量越多,效果越好。 图4.3 翻动一张卡片的排列 4. 让学生来猜这个魔术是怎样做的。 5. 此时教师可以提出将秘密告诉学生。 将学生分成两人一组,让每一组学生将他们的卡片排列成4X4的方形,卡片的排列方式 任意,检查学生是否能记住奇数和偶数的概念,并说明0是一个偶数。然后让他们再增加一 行或一列,确保有偶数张有颜色卡片(如果有色卡片的颜色已经是偶数,就增加一张白色的 卡片) ,此时教师可以将这张卡片称为奇偶校验卡片,以教学生奇偶校验这个术语。指出当 一张卡片被翻过后会变成怎样:翻过了的卡片所处的行和列中有色卡片的数量成为了奇数。 当学生会4X4后,可以让他们排更大的矩形。 变换与拓展 教师可以用任意具有两种状态的物体来代替卡片。例如硬币(正面/反面)、棍棒(水 平放置和垂直放置)、杯子(口向上和底向上)等等。如果将此活动替代活动1,可以标志 卡片的一面为0,另一面为1。将卡片用二进制表示,奇偶校验位用来保护信息。 通过卡片练习学生还可以发现更多。 让他们考虑两张卡片被翻动时的情况, 在这种情况 下,将无法确定的判断出被翻的两张卡片,尽管可以看出有卡片被翻过了。当3张卡片被翻 动后,会出现类似的情况,能够看出卡片被翻过了,不能准确的看出是哪几张被翻过了。当 4张卡片被翻动时,有可能校验位变成正确地,此时也不能发现有错了。 另一有趣的练习是关于最后一张卡片 (最右边最下面) 的设置。 如果它在列上是正确的,
  17. 16 那么在一行中是不是也是正确的呢?(答案是肯定的,可以让学生来寻找反例以证明这一 点)。 上面所用到的校验码是偶校验,即使有色卡片数量为偶数,也可以使用奇校验,即使每 一行和每一列中的有色卡片数量为奇数,此时最后放置的卡片(最右边最下面)时只有行数 和列数同为奇数或同为偶数时才可成立,例如当矩形为5X9或12X4时可以,而3X4时不行。 可以让学生自己来做奇校验并试着让他们发现这个规律。 生活中用到检错的有用于图书出版的国际标准图书号(ISBN)。它是一个有10位数字 的号码,一般印在书的封底,用来唯一的标识一本图书。最后(第10个)的一位数字并不是 图书标识,

    而是一个校验码, 就像我们之前说的奇偶校验码, 用来检验整个号码是否有错误。 如果,我们使用ISBN订购图书,若有一位数字出错,则通过校验和可以检查出,使我们不 会买到错误的书。 校验和可以通过一些简单的算法计算,可以将第一位数乘以10,第二位数乘9,第三位 乘8,依次类推,直到第九位数乘2,将所有的积相加所得到的和用s表示。例如:有这样一 个ISBN号码,0-13-911991-4,则s=0X10+1X9+3X8+9X7+1X6+1X5+9X4 +9X3+1X2=172。然 后取s除以11所得的余数,在上例中为7。如果余数为0,那么校验和为0,否则,取该数与11 的差作为校验和,位ISBN中的最后一位,即得11-7=4。此时如有算得ISBN中的最后一位不 为4,就可知道有错误发生。 使用此方法计算出的校验和最大值为10,在ISBN中使用字母X来表示,校验和为10的情 况是十分少见的。 让学生试着检验一些真正的ISBN的校验和。让他们知道他们可以检测出下列常见错误: 1. 一位数字的值被改变了 2. 两位相邻数字的值互换 3. 增加了一位 4. 减少了一位 让学生思考哪些错误是不能被检测出来的,例如,一位数字变大了二另一数字变小导致 和不变。 另一种相似的校验码(使用了另一种算法)为条形码。例如日用货品上的(图4.4)。如 果条形码读错了,则会出现最后一位与计算结果不同,此时,扫描器报警通知并重新扫描。 图4.4 一张来自食品的条形码(UPC) 相关知识 假设我们要在银行中存入10元,银行工作人员输入这张存单并将其传送给中央电脑,使 你的帐户增加10元,若在传送过程中由于噪声干扰,在数量上出现错误,会使增加10元变为 增加1000元。面对这种情况,毫无疑问,银行很有必要保证传送信息的正确性。 这只是数据传送中必须检错的一个例子,事实上,无论那种场合,计算机间进行数据传 送, 接受方能够检验接收的数据是否受到线路噪声的干扰使非常重要的。 这种传送可能是金
  18. 17 融数据、文件传真或是电子邮件。不仅是文件传送,还有一种情况下进行检错也是非常重要 的,即当我们从光盘或磁盘上读数据时。由于这些存储介质会受到磁性、电辐射、热量以及 物理损害的影响, 因此我们不仅想要直到存储数据是否受到损坏, 还想要重构哪些被损坏的 数据, 与数据传送时不同, 我们无法要求重传有问题的数据。 还有一种情形也不能重传数据,

    即数据是从遥远的空间探测头上传来的, 因为移动探测头上收集的数据会随时间而变化, 若 有错误发生,进行重传的等待时间十分漫长,而且空间探测头的容量十分有限,无法存储足 够的资料。 能够发现数据中的错误称为检错, 能够重新构造原来的数据称为纠错。 一种实现检错和 纠错的简单的方法是同一数据传送3次,如果有错误发生,那么该数据就会与其他两份数据 不同,我们可以知道并将错误的数据丢弃。然而,这种方法存在不少问题,例如如果有两份 数据正好都犯了同样的错误,就会判断出错。另外,使用该方法会使系统效率十分低,因为 必须存储或转发3倍的数据。尽管所有的错误控制体都须要增加额外的数据,我们仍然可以 采用更好的方法。 所有计算机数据存储和传送时都是采用0和1序列, 称为位, 所以问题的关键就是确保发 送的01序列是正确的。 卡片魔术用了两面不同的卡片分别表示0和1, 并增加了奇偶校验来发 现错误,同样的技术可以用于计算机中,在一行序列中增加一个校验位可以发现一位错误, 将这些序列排列成矩形(同游戏),并在每一行和列都增加一个偶校验位,我们就可以做到 检错和纠错了。 事实上,计算机使用更为复杂的错误控制体系来发现和纠正多级错误,不过,这种体系 类似于奇偶校验方法,即使是最好的错误控制体系,也会有检测不出错误的可能,不过这种 可能性十分微小,小到与一只猴子能够随意敲击出莎士比亚的作品一样。 补充读物 奇偶校验的方法探测错误是比较原始的,还有许多种更好的方法,其中比较重要的方 法有Hamming distances, CRC (cyclic redundancy check), BCH (Bose-Chaudhuri-Hocquenghem) codes, Reed-Solomon Codes, 和回旋码(convolutional codes),这些方法的具体内容可参照 Richard Hamming的Coding and Information Theory, and Benjamin Arazi’s A commonsense approach to the theory of error correcting code。Hamming的书的ISBN号码为0-13-139139-9,这 本关于编码的书有一个十分有意思的书号。比较简单,易懂的关于纠错的书有The Turing Omnibus,作者是Dewdney,以及in Computer Science: An Overview作者是Brookshear。
  19. 18 活动5 20次猜测——信息理论 关注焦点 演绎 数的归类 提问题 摘要 计算机科学非常关注信息,信息对于计算机非常重要,计算机系统要进行信息存储、读 取、分析、总结并与其他计算机交互,因此信息的量化十分关键。信息理论提供了衡量信息

    的方法,包括如何有效地存储或传输的规则。本课程研究了衡量信息内容的方法。 专有名词 信息理论 香农定理 编码 数据压缩 检错和纠错 熵 所需教材 板书,如黑板和粉笔 如表5.1的卡片 消息类型 消息样例 说明 1到100之间的数字 67 1到1000之间的数字 387 对年龄较大的学生, 可以使用1到10万之间 的数字 任意数字 145 对年龄较大的学生,可以取更大的数字 回答问题的学生年龄 10 不介意的话,可以使用教师的年龄 数字序列 {2,4,6,8,10,12} 告诉学生有6个有规律的数字, 让学生猜从 第一个到最后一个的数字 {1,3,2,4,3,5,4,6,5,7} 这些数字是先加2,再减1,再加2,再减 1,…… 句子 The switch is on 句子需要按从左到右的顺序,一次猜测一 个字母 表5.1 建议问题(见说明) 适用年级: 小学三年级以上 预设能力: 比较两数大小和数的归类 所需时间: 20到30分钟 适用人数: 从2个人到全班都适用
  20. 19 活动流程 1.与学生讨论信息。问问他们信息的定义,我们如何衡量一本书含有多少信息,他们可 能会回答用页数或使用单词来进行衡量。 但是, 一本枯燥无味的书与一本引人入胜的书所包 含的信息是否一样多呢?一本书没有什么内容,只是重复的短语“blah blah blah”,那么400 页这样的书所包含的信息量能否等于与400页的电话簿的信息量?

    显然我们可以凭感觉知道信息的内容,但很难将其量化。计算科学用信息(书)是否能 令人吃惊来衡量信息。 告诉一件你早已知道的事, 例如, 你一位总是走路上学的朋友告诉你: “我今天是走路上学的” , 不会给你带来什么信息, 因为它不能使你感到吃惊。 而如果他说: “我今天坐直升飞机来学校”,一定会使你感到惊讶,同时这句话也包含了信息。 信息中的惊人因素怎么衡量?一种方法是看能够猜到信息的难度, 如果你的朋友是走来 学校的,问你:“猜猜我今天是怎么到学校的?”,你一定可以很容易的一下猜到,而如果 他是坐直升飞机来的,你可能要猜好几次,而如果他是坐宇宙飞船来的,恐怕要猜更多次。 下面的课程的目的就是基于猜中一个消息的难度, 感知其中包含信息的多少。 这很像哲 学家的20个问题的游戏,当然,学生可以不只问20个问题。 2. 找一个学生站到前面来提问,问题如教师准备的卡片(表5.1)。提问的学生要告诉大 家这是一个关于什么方面的问题,是数字、数字序列或句子。如果是数字,那么它的范围是 多少。其余的学生可以向提问者发问,但只能回答“是”或“不是”。例如猜一个在1和100 之间的数字,可以问:“是不是大于50”或“在20和60之间吗?”,若是后者,必须在回答 前声明是否包含20和60。 教师要检查学生给出的答案是否正确, 因为错误的回答会误导其他 学生。 将问题和答案用粉笔记录在黑板上,使所有人能参考以前的问题,也可以让拿有卡片的 同学挑选提问者。 当数字被猜中后,记录下问题的数量,并指出这是衡量该数字所含信息量的方法。 3. 继续猜表5.1中的项目,记录下猜出每项所需问题数量。 要猜完表5.1的那么多项目也许会令学生感到枯燥,这取决于他们的年龄,也可以只猜表 5.1所列的部分项避免这点。 当学生们猜中数字后,讨论一下他们所使用的策略。最好的策略(学生也许已经知道) 是每次提问将数字的范围减半,通过这种方法,猜1到100之间的数字需要7次,而随意的猜 测所需次数不定。 当数字的范围扩大到1000,我们并不需要增加10倍的问题,只需要多问3个问题,而在1 到10万之间猜一个数只需要20个问题,每次数字范围加倍,只需增加一个问题,问题的增加 与范围的对数成正比。 当数字很大时,学生们可能会采用其他策略,例如逐位猜数字,这也是合理的,它的基 本思想是把一个大的消息分解, 使之成为较小的部分。 然而范围减半法仍然还是猜数字的最 有效的方法。 假如要猜得数字没有给定范围,那么必须先确定其上限,例如可以问:“它是否小于 100?”“是否小于1000?”等等。与学生讨论这种用于决定数字范围的策略,找出可以得到 肯定的答案的问题,任意递增数字范围都可以成功。例如,可以简单的先问:“是大于等于 1吗”,然后问“大于等于2?”“3?”等等,但是若要猜的数字较大的话,这种策略会耗 费很多时间。 一种比较好的策略是每次提问时将边界扩大10倍, 例如先问: “是小于10吗?” 接着是“100?”“1000?”等等。 如果是猜某人的年龄,那么尽管年龄是1到100或以上之间的一个数字。可能只需要两 个问题就可以了,在班级中讨论为什么。 (因为我们可以大概判断出人的年龄段,这与以前
  21. 20 所讨论的“信息内容”有关,因为100岁的二年级学生或12岁de教师是非常令人吃惊的。) 数字序列与此情况类似,已知序列的开头(例如{2,4,6}),可以预测出下一个数。一 旦找到关联,序列的后部几乎不含信息量。 猜句子中的字母的模式为 “下一个字母是A吗?” “下一个字母是元音字母吗?” 或 “下 一个字母是B,D,F中的一个吗?”注意单词之间的空格也应被视为“字母”。与学生讨论哪

    一种字母最难猜。 (一般来说单词的第一个字母最难猜, 许多字母可以预测即能一次猜中。 ) 容易猜中的字母含信息量少,实际上,缺少这些字母也能理解信息—例如句子:“Ths sntnc hs th vwls mssng.” 变换与拓展 若提问的策略是预先设定的,可以不用问问题而传递信息。 例如,图5.1显示了猜0到7之间的数字策略。第一问题是“大于等于4吗?”如果答案是 “是”,我们遵循右手边的路径,然后问它是否大于等于6。若答案是“否”,就遵循左手 边路径,问该数字是否是5,若答案是“否”,这个数字是4,否则为5。 如果回答问题的人知道他要遵循的策略,可以直接给出答案序列,通过该序列就可以 知道信息。例如,答案为“否,是,是”表示数字3。 图5.1所显示的结构被称为“决策树”。学生可以设计并使用猜0到15的数的决策树。让 学生思考可以用哪一种类型的树来猜年龄(它可能偏向较小的数字),以及猜句子中的字母 (决策依赖于前一个字母) 图 5.1: 猜 0 到 7 之间的数字的策略
  22. 21 相关知识 我们知道Activity1提到的信息中二进制数或比特的思想,单一的“是”/“否”恰好可以 用1比特表示,如果按照一定的方法选择问题,答案序列就是一个二进制数,例如3的二进制 数为011,表示了图5.1种的树的答案序列“否,是,是”,其中,0表示否,1表示是。关于 二进制在Activity1中已经详细讨论过了。 著名的美国数学家Claude Shannon在1948年定义“熵”来粗略的表示消息的信息量,消 息的信息量是一个有点灵活的概念,取决于你能否知道这个消息可能是什么,例如,表示抛 一个硬币的信息一般用1比特:表示正或反,但是如果这个硬币重心偏向一边,导致八次中

    有七次为正面,那么信息就不再是一比特了,无论你是否相信,会变少。我们怎样通过少于 一个问题而找出抛硬币的结果?简单的方法是问像这样的问题: “接下来两次抛硬币结果都 是正面吗?”若是上面描述的偏心的硬币,答案是肯定的可能性为49/64,或77%,这样, 平均要问的问题数量少于1。因此在像抛硬币这种情况下,熵不仅取决于结果的数量,还取 决于得到各个结果的概率。 不可能事件传递更多信息, 就像坐直升机上学比走路上学信息量 大,但是可能事件发生的频率较高,使得平均信息量变低。 Shannon对使用自然语言如英语表达的消息所含信息量的多少这个问题十分入迷,他做 了一个实验,让人们通过逐个猜字母的方式来猜句子。向实验者展示部分文本,让他猜下一 个字母,如果猜错了,告诉他并让其再猜,直到正确。例如,shannon实验中的文本 “there is no reverse on a motorcycle a friend of mine found this out rather dramatically the other day…” (为了容易猜,他省略了标点和大写),一个典型的实验结果如下: 其中,圆点表示空格,字母下的数字记录了实验者猜的次数,实验者在不知道该句子任 何信息的情况下,一开始猜的是字母t,并且猜对了,此时实验者已经知道第一个字母为t, 第二个字母h和第三个字母e也是一次猜中,而第四个字母就不是一次猜中,当实验者看到 the,可能会猜下一个是空格,此时被告知错误,猜它为n,i和s,最后猜中r,总共猜了5次。 在总共44个符号中,一次猜中的有28个,猜了两次的有6个,三次的有3个,猜了四次、五次、 六次、七次的各一个,超过8次的有2个。 上面的结果是实验者对普通文学作品的预测能力的典型例子。 事实上, 我们也在许多成 年人用这个句子做了试验, 惊人的是有相当高的比例的结果与上例完全一致。 从这些实验中, shannon得出了普通英语文本中每个字母的熵在0.6和1.3比特之间; 最近的实验表明上限更能 代表人们的能力。1比特/字母意味着平均每个字母有两种可能性,而2比特意味着4种可能, 而1.3比特表示平均每个字母有2.5种可能。 图5.1的决策树的原理是考虑了实验者所有可能猜测,可以不需要进行实验中的交互。 你可以想象实验者对每一个可能的下文设计的决策树。 在没有任何内容时,实验者会这样 做“先猜t,不对的话,猜a,然后是o,然后s…”因为t最有可能成为句子的第一个字母,然 后是a,依次类推。当人们知道了the后,可能会这样想“先猜空格,不对的话,猜n,然后 是i,然后s,r…”当知道q后,可能会“先猜u,不对的话,猜空格(短语coq a vin),a(单 词Qantas),…”实际上,要做出这样一个决策树是十分单调乏味的,即使只有一小段文本, 更不要说“完备集”了(不会有“完备集”—文字是有限的,组合的方式是无限)。
  23. 22 熵的概念与压缩(Activity2和Activity3)和检错/纠错(Activity 4)直接相关。你不能将 信息压缩得比它的熵所占空间少。尽管英文文本的模型显示了每个字母熵为固有的1.3比特 左右,在实际的计算机模型中,该模型能够有效生成上述的决策树:最好的情况能够将英文 文本压缩至约2比特/字母。由于字母通常存储在8比特的字节中,压缩可以将文本减少致原 大小的1/4左右可,这是十分有价值的。 压缩删除消息的冗余,而检错和纠错则是增加冗余。例如,在图4.2(Activity4)中为每 一行每一列增加一张卡片, 会使卡片的数量从25增加到36,

    正是这些多余的信息才能使卡片 被翻—即“错误”—被检测出来。一种压缩的方法是将结果矩阵中增加的这一行和列全部删 除,因为他们能够重新生成。但是总之,压缩和检错/纠错的工作是相反的。实际通信中最 好先将信息压缩,删除一切冗余,然后加上相应的冗余用于防范错误或通信信道中的噪声。 除了压缩外,预测还有其他应用,例如,通过压缩文本的决策树,可以建立预测用户输 入文本的界面。显然,预测不一定都是正确的,否则人们可以让计算机来替代他们的工作, 但是它的可能的正确性足以支持有效交流。 反应式键盘就是这样一种装置, 可以在计算机菜 单中显示多条不同的预测,让用户选择正确项。可能这对熟练得打字员作用不大,除非是输 入像法律合同这样具有标准样本的文件, 然而, 对一些使用键盘困难的残障人员, 十分有用。 从以上可以看出, 信息理论在计算机科学中的应用十分广泛, 从找出压缩文件的极限到 输入预测,对于日常应用主要是存储、读取和传送信息的机器是基础原理。 补充读物 Bell, Cleary and Witten的书Text compression很好的介绍了信息理论和熵,尽管这是一本面 对计算科学大学生的书。 Shannon著作最早发表于1949年,刊登在The mathematical theory of communicatio。 Donald Knuth的论文“Supernatural numbers”猜任意数字的策略,刊登于The Mathematical Gardner,编者为D.A. Klarner。 Darragh and Witten写的书详细介绍了为残障人员使用的反应式键盘及其他键盘加速装置。
  24. 23 活动 6 战舰--搜索算法 适用年级:小学高年级,如有人辅导,更小一点的孩子也可以适用。 预设能力:比较四位的数字(可以改成更小的数字) ,并计算两位数字的结果。 所需时间:大约 30 分钟

    适用人数:最少两个人,也可适用于整个班级。 关注焦点 逻辑推理 对比 不等式 摘要 在处理大量数据时, 人们往往使用计算机来搜索资料。 如果认定计算机可以通过所有的 数据做简单的搜索,来实现最终目的,那么,这样的想法是极有诱惑力的。不过,即便是运 行速度非常快的计算机, 在实际中由于参与的数据量往往十分庞大, 其缓慢速度也会令人望 而却步。该活动介绍了两个计算机搜寻速度快且目前被广泛应用技术的思想。 专有名词 搜索算法;线性搜索;二进制搜索;哈希表。 所需教材 每组小孩都需要有: 一份图 6.1 到图 6.6 的游戏复印单:第一个游戏使用 1A 和 1B;第二个游戏使用 2A 和 2B;第三个游戏使用 3A 和 3B(在会议中使用的是双面纸,这样使用显得会更简单些) ,小 孩相互之间隐藏自己的游戏单,每个小孩有一只笔; 你还需要有: 一份图 6.7 到图 6.12 剩下补充的游戏复印单:第一个游戏使用 1 A′和 1 B′;第二个游 戏使用 2 A′和 2 B′;第三个游戏使用 3 A′和 3 B′ 活动流程 1.先将小孩成对分组。我们给每个小孩第一个游戏的游戏清单,每一对中有一人会收到一 份 1A(即图 6.1),而另一人会收到 1B(即图 6.2) ,他们不会把手中的游戏清单给其它小 孩看。 在每个小孩的游戏清单顶部都有 26 个战舰图标, 他们告诉他们自己的同伴其中的四位数 字号码。这是“他们自己的”战舰,而其他组孩子都必须尽力“击沉”它们。孩子们则 轮流猜测他们同伴的战舰的位置。他们呼唤相应位置的字母中(从 A 到 Z),其同伴会告 诉他们在那个字母中战舰的数目。如果有人打出了失败的信号,那么那一组人在其清单 上未被编号的战舰数目将被注销掉。 另一组使用 1 A′和 1 B′的小孩也可以参与这项活动, 那些像 1 A′和 1 B′一样的剩余表单, 人们把它们提供给那些希望能更好发挥游戏的小孩,表单 2 A′和 2 B′,3 A′和 3 B′以同 样的原因提供给后来的游戏者选择。 2.一旦小孩完成了这次游戏,我们使用一个课时来讨论。收集得分并指出最低分和最高分, 并问小孩可能的最低分和最高分是什么。 3.我们再给孩子分发 2A 和 2B 清单。这个版本的游戏规则是一样的,但现在战舰数目是按 升序排列的。 我们再指出了这一点后, 询问孩子们是否觉得这次游戏会比第一次会容易些。 在这次新的游戏中,他们发现他们一开“炮”能除去数艘战舰。例如,如果我们正在搜索 3423 号战舰,我们却发现 8934 号战舰在 J 位置,由于船只的数目必须大于 8934,所以在 J 右侧的所有位置都是可以除去的。我们让孩子们去玩这个游戏,并观察孩子们是否利用 了排序的优势。
  25. 24 4.在孩子们完成了 2A 和 2B 清单之后,我们收集得分再次讨论它们。我们先询问得低分(或 得高分)的孩子他们使用的策略是什么。再讨论最先搜寻那艘战舰是最佳的,并指出一旦 中间位置战舰的数目被我们知道的话, 那么我们便可以知道即将被选战舰的位置是在那一 半边了。接下来,我们问孩子们下一个被选的位置是哪里。事实上,选择包含战舰的中间

    地域是最佳的算法。 每次我们都能将所需战舰的可能位置分成两部分, 这样我们就能快速 地缩小它的范围。如果提供的策略正确,那么任何一艘船都能在五步之内找到。 5.在 3A 和 3B 清单上,第三个游戏使用另外一种策略来快速定位战舰。一旦知道了战舰的 数目,你就能计算出所找战舰在(0 到 9)的哪个区域。通过加起战舰的数目,并考虑到所 得结果的最后一位,你可以很顺利地计算出区域。比如说,要查找编号为 2345 的战舰, 将各位数的数字相加 2+3+4+5,得数为 14。表单被这样安排,以致对于所有的战舰来说, 这些规则都能运作。 有了这些安排, 当孩子们被告知他同伴战舰的数字时, 他就能马上计算出战舰在哪个区域。 我们教会孩子们如何做到这点。 一旦知道区域, 孩子们就必须去揣测确定战舰在哪个区域 事。让孩子们使用这个新的策略玩这个游戏。由于在每次游戏中,战舰的区域位置只能定 位一个位置,所以在每个表单上做多次游戏是可能的。 6.跟以前一样搜集并讨论分数。 我们看看孩子们是否已经意识到了这一点, 现在的新策略比 以前的策略搜索速度更快,当然了,偶尔也可能是非常缓慢的。我们可以问问孩子们哪些 船能够很快就找到,而哪些船是非常难找到的。 7.最后我们讨论以上三种游戏策略的优点。(第二种策略比第一种策略快捷,但是第一种策 略不要求船只按顺序排列。 第三种策略通常来说都要比其它两种策略来得更快, 但是偶尔 变得相当慢也是可能的。在最坏的情况中,所有的战舰都在同一个区域中,这时第三种策 略就跟第一种策略一样的慢。) 变换与拓展 让孩子们用 3 种方法构建自己的游戏。对于第二个游戏(A2 和 B2) ,数字升序排序是 关键的。对于第三个游戏(A3 和 B3) ,他们必须计算出各个战舰在哪些区域?讨论将如何 选择数字会使得游戏变得很难(最难的游戏是当所有的战舰都在同一区域里) 。随机选择这 些数字又会怎么样呢? (不太可能--因为这些战舰被安置在随机的盒子里, 所以所有的战舰 在同一盒子结束的可能性非常小,所有的战舰随机结束在同一盒子的概率也就只有 25 1 10 。 ) 你将怎么做使得这个游戏尽可能地变得容易些呢? (你应该努力将相同编号的战舰放进去每 个栏里面去。 ) 我们讨论一下: 如果通过搜索这些战舰根本不在这里, 那将会怎么样?在第一个游戏里 (1A 和 1B) ,找到它们需要 26 次射击。对于第二个游戏,使用“分而治之”的战略:将仅 用不多于 6 次射击就可以发现那战舰已经消失。 第三种策略的成功与否取决于有多少战舰出 现在相关的栏里。如果没有,我们知道立即放弃,否则栏里的所有的战舰都必须检查。 对于第二种策略--清单上的排序方式—年长些的孩子可能会考虑如果有 100 个位置将 需要多少次射击(大约 6 次) ,1000 个位置呢(大约 9 次) ,或 100 万个位置(大约 19 次) 。 我们应该注意到这一点:随着战舰数目的增加,射击的次数增加得非常慢。 (每次规模增加 一倍就需要一次额外的射击,所以这就与战舰数目的对数成正比。 ) 和第二种策略密切相关是猜测活动 5 的游戏。 第一个人猜测 1 到 100 之间的一个数, 而 第二个人回答第一个人猜对或猜错那个数。 即使是一个很大的范围, 如果这个策略运用得当 的话,也就仅仅需要猜几次就够了。 (既然每一次猜测就占其一半的概念,如果你将规模扩 大一倍,只需要多猜一次。 )
  26. 25 对于第三种策略, 你所期望猜测的次数是由栏中所分配的战舰数目决定的。 如果这些战 舰散布在尽可能多的栏中的话, 这是最容易找到的。 我们重新安排这些数字的顺序且不改变 其栏(例如 1234 在相同的栏里存贮为

    4321) 。为了避免过度的热门栏目,虽然这种分配必 须用一个可重复的栏来完成, 但是我们真的希望有一种方式, 其编号指派每一个战舰到一个 “随机”的栏里。这种映射也叫伪随机。 孩子们可以安置可移动的贴纸在这些数上, 每射击一次就将这些贴纸除去。 既然这些孩 子在玩的时候能够看到对方, 他们就能够看到搭档是否在恰当地做工作。 这需要不少不透明 (最好是黑色的)的贴纸,把他们全部放在战舰上将需要很长的时间。 这次活动对于比较小的分组也可以用卡片来做的。 孩子们将卡片倒置放在面前, 然后由 他们的搭档者来选择那一张需要翻回来。 这次活动, 那些孩子与合作能力不强的搭档者并没 有什么优劣之分。这些孩子应该正确地摆放这些卡片,这中间可能需要大人的帮助。更为戏 剧性的模拟是, 将这些数字放在大石头或砖头下面, 这样要测试 “射击” 就需要大量的工作, 给孩子的感受也就更为深刻。 相关知识 在计算机中, 人们经常需要查出存储信息的位置。 计算机结算账目需要从条形码确定产 品的说明和价格, 银行出纳员需要为客户的账户查询平衡情况, 而网上图书馆目录需要能够 找某作者书的标题。 计算机能存贮很多信息, 而它们需要过滤来确定向它们发出请求的位置。 需要计算机查询的数据,如条形码、客户账号或作者的名字,这叫做关键字检索。通常 问题在于是计算机必须确定某些和关键字相关的额外信息, 如产品价格、 账户收支平衡或书 的标题, 虽然有时候我们只对其是否存在感兴趣, 如我们查字典来核对一个单词的拼写是否 正确。 计算机能够很快的处理信息, 而你也许认为要发现某些信息应该从它们的存储器开始然 后一直搜索直到找到为止。这是类似于第一次策略中的战舰游戏。但即使对于计算机来说, 这也会非常慢。例如,假设一个超市的货架上有 10000 种不同的产品。当一个条形码在一次 检测中被扫描到, 计算机必须核对 10000 个编号来找到这种产品的名称和价格。 即使它只花 了 1 1000 秒来校验每个条形码,要核对所有的条形码就需要 10 秒钟。想想,要核对一个四 口之家的杂货店那将需要多久的时间! 对应于第二个版本的战舰搜索算法,二分查找方法是一个更好的策略。在这种方法中, 这些数字事先就按顺序排好了的。 检查中间的数字便可知道应该在哪一边寻找。 在每一次搜 索都要重复这个过程,直到最后只剩下一个数字。现实生活中,人们用类似的策略查字典或 查询电话号码,这比从头开始一直顺序往下找来得要快。想想,在一种像汉语这样的表象语 言中,里面没有字母表顺序,在里面搜索一个电话簿的问题需要多久的时间!再回到超市的 问题,这 10000 个关键字现在可以通过 14 个探针来搜索,这可能只用 1 200 秒--这几乎察觉 不到的。 对于最后一次战舰游戏,用第三种策略来查找数据,这种方法也叫做哈希散列。这里搜 索通过操作关键字来确定要查找信息的确切位置。 对于我们来说, 这种操作涉及了关键字的 位数以及关键字的最后位数。这产生 10 种可能的位置(我们把它们叫做“栏目” ) 。实际上, 要保证相关的关键字结束, 需要更多的可能位置。 这便意味着大多数的计算机能很快找到所 需信息。然而,也有这样的可能性(通常是很小的) ,同时有几个关键字在相同的位置结束, 在这种情况下计算机就需要对它们进行搜索,直到找到为止。最近,香港电话簿还是这样工 作的:姓名对应于号码按组存贮起来,只要找到相应的组,你只要扫描这个组就可以找到你
  27. 26 要找的名字。 计算机程序员通常通过散列策略进行搜索,除非保持数据的有序性显得很重要的场合, 或者是偶然反应缓慢是不可接受的场合(如维持生命系统)。 补充读物 计算机科学的大多数教程都讨论三种方法--线性搜索法、 二分法和哈希散列法, 并且有 无数的变化和应用。Harel 的《计算科学》给了很好的介绍。更详细的介绍可以在

    Kruse 的 《数据结构和程序设计》 以及 Dale 和 Lilley 的 《Pascal Plus Data Structures, Algorithms, and Advanced Programming》里面讲到。对大量存储的设备(像磁盘),搜索技术所涵盖的文 件有:Betty Salzberg 的分析方法、图灵有一段关于哈希散列存储的描述。其中 1973 年 Knuth 的经典著作 《计算机程序设计的艺术》 第三卷: 排序和检索是最全面的文本检索(排 序--见活动 7),虽然这很详细但却只适合专业人员或痴迷者。
  28. 39 活动7 排序算法 关注焦点 比较 排序 不等式 摘要 计算机经常被用来把数据清单排列成有序的顺序,无论是按字母,数字,或日期。如果 使用了错误的方法,即使是在高速的计算机上运行,它都可能需要很长的时间进行排序。幸

    运的是,有几种众所周知的快速排序方法。在这一活动中,孩子会遇到不同的排序方法,一 个有创造性的方法比一个简单的方法执行任务更快。 专有名词 排序算法;插入排序;选择排序;快速排序;递归;划分; 合并;合并排序;插入排序;冒泡排序。 所需教材 每个学生或每组学生需要: 约 8 个大小相同,重量不同的容器(如牛奶盒或电填充砂的胶卷筒) ,以及天平。 活动流程 在计算科学中, “排序”通常指将列表按字母或数值顺序排列,这与普通的排序概念不 同,不包括将分类和分组。 1. 讨论计算科学中排序的意义,让学生们想想哪些场合下排序是非常重要的(如将电 话簿中的姓名、字典、图书索引、图书馆或书架上的书、邮递员包裹里的信件、班级名册、 地址簿、计算机中的文件列表) 。并让学生每思考这些场合中没有排序的后果(无序引起的 常见的问题是人们需要花费大量时间来查找目标) 。 指出排序能够使我们快速进行查找,凸显重要的内容,如果将班级中学生的分数进行 排序,那么很容易看到最高分和最低分。 2. 让学生使用天平称8个外表相同,重量不同的容器,容器外表相同使学生不能肉眼 分辨它们的不同,只能使用天平进行判别。 教师可以在容器上作记号表示它们的重量,但是学生不能识别该记号,例如,可以使用 希腊字母按从轻到重的顺序各容器编号为α、β、γ…… 检查学生,确保它们能够使用天平辨别两个物体的轻重。 3. 让学生们找出最轻的一个容器,只能使用天平(一个方法是,按顺序称,每次都用 适用年级: 小学以上 预设能力: 使用天平,排序 所需时间: 10到40分钟 适用人数: 从一个人到全班都适用
  29. 40 最轻的和其他进行比较,也就是说,先比较两个,找出较轻的,在将这个较轻的与另外的比 较,重复下去,每次保留较轻的。 ) 4. 讨论如何知道容器按照重量的升序排列 (检查第一个是否比第二个轻, 第二个是否 比第三个轻,依次检查,如果每两个都是升序,那么整个队列就是升序排列的。 )

    5. 让学生仅仅通过使用天平比较两个容器重量,将三个容器按重量升序排列。经过3 次比较,可以很容易完成,如果学生能够认识传递性的话,只需比较两次(所谓传递性,就 是如果A比B轻,而B比C轻,那么A比C轻) 。 6. 让学生将所有8个容器都按照重量升序排列,随便他们用什么方法。这可能会占用 大量时间,当他们认为排好了,检查他们的成果,用天平称相邻的两个容器。 7.让学生按一下方法进行排序,这种方法称为“选择排序” ,他们可以计算一共需要 比较几次。 选择排序的具体步骤是这样的,先用之前介绍的方法找出最轻的一个容器,放在一旁, 接着在剩下的容器中找最轻的一个,它是升序排列中的第二个,将其拿出放在相应位置,重 复以上操作。图7.1显示了选出了第五轻的容器并将添加到排好顺序的队列的最后。 图7.1 用选择排序进行重量排序 8. 如果学生具有一定数学知识,他们能够计算出使用这种方法排序需要比较的次数。 (要找出n个物体的最小值,需要比较n-1次。例如,要找出两个物体中较轻的,需要比较1 次,要找出5个中最轻的,需要比较4次。要找出8个物体中最轻的,需要比较7次,比较6次 找出第二轻的,5次找出第三轻的,依次类推,总共需要比较7+6 + 5 + 4+3 + 2+1 = 28次。 ) 9. 让学生按照下面的方法排序,这种方法称为“快速排序” 。就像它的名称一样,这种 方法比选择法排序要快,特别是比较大的列表,事实上,这种方法是目前所知的最好的方法 之一,让学生计算使用快速排序法排序所需比较次数。 快速排序法的具体步骤是,随机选择一个容器,将其放在天平一端,然后与其他容器进行 比较,并将它们分为2组,一组是比选定容器轻的,一组是比选定的重的。将选定容器放在 中间,轻的一组放在左边,重的一组放在右边(不可能出现其它情况) 。在每一组中重复这 个过程—也就是说,将这些组再进行划分,在所有的分组中重复该过程进行划分,直到每组 仅含一个容器, 当所有划分好的组中都只有一个容器, 那么所有容器都是按照升序排列好的 了。 图7.2是快速排序的一个示例,在图7.2a中,随机选中了一个50g的容器,然后使用天 平将比50g轻的放在它的左边, 重的放在右边。 在途7.2b中, 用一个20g的容器划分轻的一组, 60g的容器划分重的一组。在这两个步骤中,划分结果不是均匀的,在第二个步骤中,有一 个分组没有容器,一旦含有两个容器的两个分组被划分,排序就完成了。 实际上,划分容器取决于随机挑选了哪一个容器。例如,如果在图7.2中第一次选中的
  30. 41 是80g的容器,划分的组将十分不均匀。然而,队列仍能按升序排列,不均与的划分仅会增 加比较的次数。 10. 比较选择排序和快速排序所需比较次数, 如果有多组做试验, 在全班公开结果。 (选 择法对8个物体进行排序所需比较次数总是28次,在图7.2中,快速排序法对8个物体排序只 需要比较14次,快速排序法所需比较次数不是固定的,这取决于选择多重的容器进行分组,

    最坏情况下, 即每次都恰好选到最轻或最重得容器进行分组, 此时所需比较次数与选择排序 法比较次数相同,这种情况是十分少的,总之,快速排序不会比选择排序比较次数多,而且 通常会更少。 ) 图7.2 用快速排序进行重量排序 变换与拓展 还有许多不同的排序方法。 更高年级的班级可能希望尝试其它方法对重量排序, 除了选 择排序和快速排序法以外,还有以下常用方法。 插入排序:原理是通过移动无序组内的各个目标并将其插入到正确位置(见图7.3) 。 每次插入都将缩小无序组而增加有序组, 直到所有目标加入有序组。 打扑克时经常使用这种 方法整理牌。 冒泡排序:重复遍历整个队列,比较相邻的两个物体,如果顺序不对,将其位置交换 (见图7.4) 。当没有交换发生时,整个队列排好顺序。这种方法虽然不是十分有效,但是有 些人认为它比其它方法容易理解。
  31. 43 剩下的问题是如何对分组中的物体排序,很简单,他们可以用合并排序法排序!这意味 着它们被分成原分组的1/4,将这些分组进行排序。每次都分成两个队列,并将其用合并法 排序,除非不能再分,此时,队列已排好顺序。最终所有的队列都将被分成只有一个物体, 因此不会无限循环中。 当对大量物体(两打或以上)进行排序时,各个方法的不同更为明显。对50张写有随 机数字的卡片进行排序,使用选择法要比较1225次,而快速排序只需要比较271次。 年龄较大的孩子可能会喜欢计算选择排序所需比较次数。n个物体排序需要比较次数为 1+2+3+4 +…+n

    1 − 次。可以将其分组进行计算,例如,要算1+2+3+…+20,可以这样分组: (1 + 20) + (2 + 19) + (3 + 18) + (4 + 17) + (5 + 16) +(6 + 15) + (7 + 14) + (8 + 13) + (9 + 12) + (10 + 11) = 20X 10 = 210 通常,1+2+3+4+…+n-1=n(n-1)/2。 相关知识 我们经常会用到有序表。电话簿、字典和书籍索引都按照字母排序,如果没有排序,会 觉得很难用,在有序表中查找信息业比较容易,另外,如果数字列表(例如价格表)是有序 的,一些特殊数字就会很显眼因为它们会位于列表的开头或末尾,重复的数字也容易发现, 因为它们都是相邻的。 排序是非常重要的, 也是计算机的主要工作。 在70年代, 据估计, 大部分计算机花费1/4 的时间在做排序—有一些计算机甚至会用超过一半的时间排序。 大量的计算机的输出结果是 有序的:名字和地址表要按字母顺序排列,显示在屏幕上的文件也是字母顺序的,或按它们 被创建或最后一次修改的顺序排列——当打印出的列表的名字是按字母顺序排列的, 会显得 十分专业,尽管这不是严格规定的。 使用天平排序是计算机排序的一个精确的模型,因为排序的基本操作就是比较两个值。 大部分排序算法基于这个操作, 而且衡量它们效率的标准就是需要进行几次比较, 因为这是 一个很好的指标来看出排序所需时间,并于计算机的运行无关。 研究者花费了数十年的时间研究排序问题, 提出了几十甚至上百种排序方法。 以上提到 的是最基本的,其它许多种方法都与它们有关。可以将排序方法划分为两种,一种是较慢的 (插入排序、选择排序和冒泡排序) ,另一种是较快的(快速排序和合并排序) 。慢的方法只 在特殊场合有用, 对于大量数据的排序就太慢了。 快速排序和合并排序是许多计算机采用的 标准方法。 快速排序和合并排序都采用了一个计算机科学中十分重要和强大的概念: 递归。 这是一 种自己来描述自己的方法(算法) 。这两种方法都将列表划分为部分,然后在每一部分都执 行同种排序方法,这种方法被称为“分步求解” 。重复划分列表直至不能再划分。在这两种 方法中,列表被划分直到只包含有一个物体。没有必要对一个物体进行排序。 合并两个有序列, 只是合并排序法的基础, 也是更多一般匹配两个组中项目的问题的有 效方法。例如,邮递员将信投入邮箱,因为信封是有序的,街道的邮箱是有序的,可以看成 是合并排序,要投递的信一定是在一叠中最上面的一封。两个代理机构(例如社会福利和税 务部门)可以看出是否有人骗福利,例如,如果有人在税务机构申报了收入,他就不能领取 失业救济。将排好序的这两个机构的名单合并,有重复的就是不合法数据。
  32. 44 补充读物 排序是计算机科学的标准课题,许多文章介绍和讨论排序,如Kruse的 Data Structures and Program Design。Harel在Algorithmics多次提到排序。排序的经典著作(虽然有些老) 是Knuth的The Art

    of Computer Programming, Volume 3: Sorting and Searching, 1973 年出版。Dewdney在Turing Omnibus中讨论了合并排序和另一种有序的排序方法堆排序。
  33. 45 活动8 敲钟——排序网 关注焦点 比较 排序 改进算法 协作问题求解 摘要 尽管计算机速度很快,解决问题的速度仍然不够。一种提高速度的方法是将工作划分,

    让不同的计算机同时处理每一部分,这种策略称为“并行计算” 。本次课程显示如何按数字 顺序排序,通常采用并行方法能提高速度。 专有名词 并行计算;同步;排序 所需教材 粉笔或其他板书材料 两套卡片,每套6张,如图8.7。 一块秒表 活动流程 1.先在地上画出如图8.1的网络,要画得大一些,能使学生沿着路线走,其中的圆圈 和方块必须是明显的,可以采用以下方法: 用粉笔画在沥青路面上 用重物将带子固定在草地上 将磁带铺在地板上 用线或纸袋订在地板上 在草地上割出路线 适用年级: 小学三年级以上 预设能力: 比较两数大小 所需时间: 10到30分钟 适用人数: 至少6个学生
  34. 46 图8.1 一个排序网 2.如果学生未做过活动7,先讨论计算机要频繁的进行排序(相关内容见活动7) 。 3.向学生展示画在地板上的排序网络(图8.1) ,并告诉他们如何使用,使用方法如下: 将学生分为队,每队6人。一次只能有一队进行。为每一队员发一种卡片,卡片上的数 字为1到6。队员开始都站在网络左手边的方块中,顺序随意,然后沿着路线前进,遇到圆圈 时停下,等待另一位队员的到达。当一个圆圈中有两个队员时,需要比较卡片,有较小数字

    卡片的队员从他们的左边走,较大数字卡片的队员走右边(可以将右边的路径画得宽些,以 显示这是大数字的路线) 。 当他们到达右边的6个方块时, 他们卡片的数字一定是按照升序排 列的。图8.2的例子。 图8.2 通过排序网的一个数流例子 4.当学生理解了之后,可以进行比赛,使用秒表来统计每一个队所花时间。现在可以使 用数字较大的卡片,看看哪一个队最快。在比赛中,如果最后的数字顺序不对,或有学生留 在圆圈中,表示这个队出错,必须重来。 变换与拓展 若学生能够理解网络中节点(圆圈)的作用,通过圆圈时,小的向左,大的向右,可 以发展出更多变化。一个简单的问题是“如果现在让小的通向右边,大的通向左边,会变怎 样?” (此时数字排序的最终结果是与之前相反,即降序。 )还可以问: “如果相反方向进行, 该排序网络还起作用吗?” (这是不一定的,可以让学生们找出反例。 )
  35. 47 学生可以尝试设计更小和更大的网络。例如可以让学生自己设计如图8.33数排序网络。 图8.3 一个更小的排序网 图8.4 四个输入值的两种不同排序网 对特定数字进行排序时的网络不止一种形式。例如图8.4显示两种不同的4数排序网络, 哪一个更快呢?(第二个)因为第一个网络顺序进行所有的比较,而第二个网络中有些比较 时同时进行的。第一个网络是串行进程的例子,而第二个使用并行进程以提高速度。 如果一些学生想要进行更难的练习,可以做图8.5所示的更大的网络。

    图8.5 一个更大的排序网 排序网也可用于确认输入的最大值或最小值。例如,图8.6显示了一个8数排序网,最 后的一个输出一定是输入数值中最小的(其余的都留在网络节点中) 。 讨论可以使用并行提高速度的例子。例如,做饭菜时如果只有一个厨具,速度会很慢, 类似地,建造房屋时,同时总会有不止一个人做不同的任务。什么样的工作可以完全通过雇 用较多的人来提高速度?什么样的工作不能?
  36. 48 图8.6 寻找8个数中最小数的网 相关知识 计算机能力以不可想象的速度增长, 几乎每两年其速度会增加一倍, 内存能力的增长更 为频繁,然而它们的价格却没有增加,有了这样稳定的计算能力以指数速率增加,很难理解 人们为什么总是抱怨他们的计算机太慢。然而,当更快的模型出来时,那些有能力迅速升级 的人们确实这样做了。

    当我们看到计算机的能力以及它更多的用处时, 我们的期望快速的增 长。25年前,现今的慢速文字处理器是不可想象的,在文字处理器出现后,一个小孩的绘画 程序成为了研究项目。 一些人需要速度更快的计算机, 他们不能等几年到计算机速度更快的时候才使用。 受到 这些需求的刺激, 在不提快计算机速度的情况下, 计算机科学家们寻找方法来提快计算能力。 一种方法是, 使用更少的处理步骤来编写实现任务的程序。 这种方法在搜索活动和排序活动 (活动6和活动7)中用到。 另一种解决速度快的问题的方法是, 让几台计算机同时处理任务的不同部分。 这种方法 只能在任务可以被分成相对独立的几部分的情况下使用。 这通常是不可行的, 但计算机科学 家已经发现了大量能并行计算的日常任务,包括:查找数据库和数据排序。本活动显示,排 序问题如何被分解成许多相互可比的操作,许多这些操作可以同时执行。 例如,在图8.2中,有3个类似操作并行运行。在排序过程中,尽管12个类似操作将能并 行运行,但许多这些操作同时运行,仅仅5个并行就会出现超时。这种并行排序网的速度是 一次仅能执行一个操作的系统的两倍。 并行处理器不贵吗?是的,有点儿。但你花在一台电脑上的大部分钱是用来买显示器, 键盘,机箱,电源,光驱,……甚至是电脑桌。与这些比起来,该处理器芯片确实是非常便 宜了,并有十几(甚至上百)的芯片,而不会太多地影响电脑的价格。 不是所有的任务都能用并行计算迅速完成。 做一个模拟: 设想一个人在挖一条10英尺长 的壕沟。如果10个人每人挖一英尺,该任务就可以以几乎快10倍的速度完成。然而,相同的 策略不能应用到挖一条10英尺深的壕沟——直到第一个1英尺完成后才能进行第二个1英尺。 虽然一名女子可以怀胎9个月,但不能加快这个过程:九名妇女共同怀一个孩子1个月。 补充读物 David Harel写的Algorithmics中的第10章讨论了并行和并发,包括:排序网,挖沟和 怀孕的类比。
  37. 50 活动 9 泥泞的城市—最小生成树 适用年级:小学三年级以上 预设能力:能数到 50 所需时间:大约 20 到

    30 分钟 适用人数:从一个人到整个班都可以 关注焦点 难题解决 优化 规划 摘要 我们的社会是由许多网络连接起来的:电话网,公用设施的供应网络,计算机网络和道 路网络。 对某一特定的网络通常有些关于选择该在哪安置这些路、 电缆或无线电连接设备等。 以下活动探索一种方式来优化在一个网络中对各联系对象间的选择。 专有名词 最小生成树;贪婪算法;图形算法。 所需教材 每个学生都需要: 一份图 9.4 中的材料(如果要将其扩大为两倍大小的纸张让这些学生用起来会比较方便些 的) ,以及筹码或正方形纸板(大约每个学生 40 个) 。 活动流程 从前,有一个没有路的城市。在暴风雨之后走过这个城市附近是特别困难的,因为地面 非常的泥泞—汽车陷入了泥水中并且把人的靴子都弄脏了。 这个城市的市长决定对某些街道 进行铺路, 但又不想花太多的钱因为这个城市还需要建一个游泳池。 因此这个市长指定了两 种情况: (1) 应该让足够的街道被铺好使得让每个人都可以从他们的房子只经过铺好的路走 到别人家的房子,中间可以经过别人家的房子。 (2)铺路的总费用应该最小。 在图 9.4 显示这个城市的布局。在每个房子之间铺路石的数量代表铺那条路线的费用。 接下来的问题是计算允许人民从任意一间房子到达任意另外一间所需铺路石的最少数目。 1. 给每一个学生一份材料并将以上泥泞城市的问题解释给他们 (你应该使得这个故 事适合这些学生的年龄) 。 2. 给出筹码并且让学生设法通过筹码发现什么地方应该铺石子的高效率的解答。 如 果有更好的解决方案这个班就会被告知。图 9.1 所示两种优化的解决方案,两种 的代价都是 23 块石头。正如这个例子阐明,这类问题可能不只存在一种解,但 每一种的结果的总代价都一样。 3. 讨论这些学生用来解决问题的策略。 有些学生可能将发展一种从空白图开始的策略, 如果有必要就渐渐地增加砖块直 到所有的房子都连接起来。这是一个好的策略;事实上,你能保证找到一种优化 解决方案,如果你增加路径的时候按顺序的增加路径长度,但一旦所有的房子都
  38. 52 图 9.2:泥泞城市问题的抽象表示 图 9.3:图 9.2 中泥泞城市问题的一种解 转换及拓展 这些学生可以对其他城市进行试验。 图

    9.2 显示能够更快的画出和更容易工作的一个城 市的更抽象的表示方法。其中圆圈代表房子,线表示泥泞的路,而线旁边的数字表示路的长 度。 计算机科学家和数学家经常用这种抽象的表示方法来阐明这种问题的关系。 他们称之为 图表。刚开始这也许会引起混乱因为“图表”这个术语在数学里表示在一个图中显示数字数 据,例如图的长条图,但计算机科学家所用的图与这些无关。注意在图 9.2 中的长度是不合 比例的。图 9.3 中的点线显示一种解答。 你可能让学生们考虑在一个城市里有 n 个房子多少路或多少连接是必要的。 结果显示一 种优化的解决方法里面将总有精确的 n—1 条连接, 因为这总能足够将这 n 个房子连接起来, 而增加一条就会使各房子之间产生不必要的路径。 另一个延伸是让学生们寻找一种可以用图表表示的实时网络, 例如在地方城市之间或飞 机场附近的道路网络。 泥泞城市问题的算法在这些网络中可能不常用, 因为它简单的把路径 或航线的总长度最小化。 它能保证你能到达任意两个点, 但并没有考虑线路是否方便。 然而, 存在别的可以用在图表中的算法, 诸如寻找两个点之间的最短路径, 或经过所有节点的最短 路径。通过图表抽象的表示网络是对解决这类问题的第一步是非常有用的。
  39. 53 相关知识 假设你是设计一项公共设施如电力、 煤气或水等应该如何传输到一个新的社区。 一个网 络的点线或管道是必要连接到所有的家庭以及公共设施公司。 每个家庭必须连接到网络上的 一个点,但其他线路从公共设施到房子间的线路通常不是很重要的,只要线路存在就行。这 个任务设计的一个使总路径最短的网络称作最小生成树。 最小生成树不仅在天然气和电力网络中很有用;他们帮助我们在不同应用如计算机网

    络、电话网、石油管道和飞机航线中解决问题,然而,正如上面所说的,你必须在考虑线路 的代价的同时也考虑到线路的方便与否。这对在图表中解决其他问题诸如“旅行商问题”如 何寻找在网络中访问所有的节点最短的路径第一步是很有用的。 最小生成树问题存在高效的算法(方法) 。一个简单的最佳解决方法就是从没有任何连 接开始,然后不断添加连接和增加规模,只把网络中先前没有连接的部分连接起来。这种方 法之前已经提到过, 但是我们知道, 学生们必须自己发现这种算法。 这在 J.B.Kruskal 于 1956 年发表之后叫做 Kruskal 算法。 补充读物 Harel 在算法中讨论最小生成树,同样显示了最小生成树如何用于“旅行商问题” 。 Dewdney 图灵统括有一段关于最小生成树,其中讨论了 Kruskal 算法。 图 9.4 说明:寻找从任意房子到别的任意房子铺路所需石头数目的最小数。 (桥不需要铺。 )
  40. 54 活动 10 橙子游戏--网络中的路由和死锁 适用年级:小学三年级以上 预设能力:以组为单位集体协作,共同解决问题 所需时间:20 分钟或更多时间 适用人数:每组 5

    个小孩,也可以更多 关注焦点 解决问题的协作能力 逻辑推理的合理性 计划编制 摘要 人们在争夺稀缺资源时,筹划周密是必要的。当对资源的需求有依赖关系时(如:汽车使 用公路,通过网络获取信息),有可能出现“死锁”的情况,在任何人继续下去之前,死锁 都一直存在,因此,有些人总是必须返回的。这项活动主要是让孩子体验争夺资源的情况。 协作程序要求每人在出现“死锁”之前完成预想的结果。 图 10.1 6 个小孩玩 11 个橙子的游戏,其中 D 小孩有一只手是空的。 专有名词 路由,死锁,信息传输 所需教材 每个小孩需要有:两个橙子,一个标签和贴纸 活动流程 1.我们先把小孩按 5 人一组或更多人一组分组,每组小孩坐成一个圆圈。(先只开始一 组,让其它组先在一旁观看,这对活动是有帮助的。游戏可能需要长达 15 分钟,但我们没 有必要去看整个游戏是否结束。) 2.除只有一个孩子被分给一个橙子之外,该组的其它小孩都被分给了两个橙子。我们 将孩子用字母做了标签,橙子也同样做了标签,一个字母对应两个橙子。孩子们穿同样标
  41. 55 记的衣服以展现他们的字母。这些橙子被混合在一起,使字母跟对应的小孩暂时不能在一 起。孩子们一手举着一个橙子。图 10.1 表示了一种安排孩子和橙子的可能情形。 3.游戏的目标是让孩子们通过橙子,使每个孩子最终持有他们相应的橙子--如:A 小 孩必须持有包含 A 标签的橙子等等。这里有两条必须遵循的规则:

    (a)小孩一只手只能举一个橙子。 (b)橙子只能通过空手,然后立即传给圆中的邻居。 在图 10.1 中的游戏规则是:只允许 C 或 E 的小孩传橙子给 D 小孩。C 小孩可以从 B 或 E 小孩传得橙子。 小孩们很快就会发现,如果他们“贪婪”(一旦得到自己的橙子就不放手),那么该组可 能永远无法实现其目标。强调个人不“赢”的游戏是必要的,但在该游戏中,只有当每个人 都有自己的橙子,这个问题才被真正解决。 如果孩子进展有困难,我们就假想如同小孩 A 和 F 之间有一个墙,这样假设是有帮助 的,即相当于孩子们共处一线,而不是一个圆圈。(有一种理想的做法是按着字母的顺序排 序,交换字母手续简单,但是这是不符合我们设定的规则的) 4.如果有一组完成得早,那么他们可以试着尝试如下的一些游戏规则变异。 5.最后需要有小孩来讨论解决问题的战略思想。 变换与拓展 该游戏有很多可能的变化。其中一些可能性是: 1.尝试在更大或者更小的圆圈中玩这种游戏。 2.有其它小孩进来的变异规则。 3.在小孩间不交谈的情况下进行游戏。 4.尝试用一种不同的配置传递消息,如:所有小孩坐在一条直线上,或者对某些小孩有两 个甚至更多的邻居。(看图 10.2) 5.这个问题可以模拟出由一个人来操纵令牌,自动协作,但策略仍可加以探讨。 当小孩们出现“死锁”问题时进行讨论,有一些类似的例子:网络通道上出现堵塞;试图 让很多人一次性通过入口。 图 10.2 橙子游戏的一些配置:(a)圆圈 (b)线 (c)栅格 线条显示橙子在那里可以通过。 (a) (b) (c)
  42. 56 相关知识 如道路系统和交通拥堵,电话和电脑系统中,路由和死锁在许多不同类型的网络是个重 要的问题。工程师们花了很多时间来弄清楚如何解决这些问题,以及如何设计网络,其中的 问题是容易解决的。 在许多不同类型的网络里,路由、拥塞和死锁,可成为当前令人沮丧的问题。试想一下, 你最喜欢的时间,却是交通最拥挤的时间段被耗掉!在纽约市的交通街上,堵塞的情况已经 出现好几次了,它变得如此的拥挤,以致出现死锁的情况:没有一个人能够开走他们的车。 很多时候, 在许多商业部门(如银行)之所以倒闭,

    便是因为他们电脑的通信网络出现了死锁。 设计网络,使路由简单而有效和拥塞最小化,这也是许多工程师所面临的一个困难问题。 有个关于死锁的典型案例(虽然这个案例有些过时),两个人共同使用一台计算机运行 程序, 同时使用磁带阅读器和一台打印机。 A 要求从计算机磁带上读出一些数据并打印出来。 为了做这,计算机必须分配出磁带阅读器和打印机给 A。假设磁带阅读器被分配给 A,但在 打印机被分配之前,而 B 的程序做了一个相同资源的请求,并优先分配给了打印机。现在 这两个程序就出现了死锁,在其它程序释放资源之前,没有任何一个程序可运行。 对现代计算机更可能出现的情形是,用户在竞争使用放置在一个数据库上的数据。如果 一块数据(如顾客的银行存款余额)正在更新,在更新过程中,“锁住”它是非常重要的, 因为来的另外一个资源同步更新, 可能导致记录存款出现错误。 两个人以不同的顺序访问相 同的数据时,“死锁”也可能发生。这种情况是必须防止的,因为一旦它发生,人们将不得 不无限期地等待回应。尽管它也有可能不会发生,但是对一个系统来说,这是一个事实:如 果系统可能会使系统出现死锁,那么它迟早会发生。这听起来像“墨菲法则”--如果事情 错了,那么他们也将一直错下去--但是比起“墨菲法则”来说,死锁更为恶劣,因为它带 来的不仅仅是倒霉:你可以证明:一个受随机输入支配的系统会发生死锁,那么它必然最终 将发生死锁。如果有更多请求参与了死锁,事情将变得更加复杂。 在计算机设计领域, 并行计算的来临是最令人振奋的发展, 如果数以百计或数以千计的 类似个人计算机处理器相结合(当然是在一个网络里面),从而就好像是形成一个更为强大 的计算机。跟橙子游戏一样,这类问题许多都必须不断地依赖网络,以便于这些并行计算机 工作。 补充读物 许多电脑操作系统的书籍,如 Tanenbaum 的书中,都有关于死锁的章节。Tanenbaum 的 书中还收录了鸵鸟算法和银行家算法。Peterson 书中 Petri 网的理论和建模系统也讨论了此 类问题。
  43. 57 活动 11:寻宝——有限状态机 关注焦点 地图 抽象表示 认知模型 摘要 电脑程序总是需要来处理一系列符号。这些符号可能是文件中的字母或单 词,或是其它的电脑源程序。计算机科学家常常用简单的但很强大的思想来处理

    这些符号,这种强大的思想称为有限状态机。有限状态机包括类似于地图中的简 单指令。这个活动给出了这个思想是怎样起作用和它能做什么。 专有名词 有限状态机,语言,解析,编译器 图 11.1 最终地图 所需教材 每个学生需要的:一份图 11.7 所示的地图,一只钢笔或铅笔 你需要的:图 11.8 中的一系列卡片,使用卡片来分类图 11.7 中使用人名标记的 岛;奖励(邮票等) ;空白纸,卡片,构造新地图的标签。 适用年级:小学三年级以上 预设能力:能读懂简单的地图 所需时间:大于等于 15 分钟 适用人数:大于等于 10 个人
  44. 58 活动流程 在这个活动中,7 个人围绕着房间(如果在户外可以分开些) ,每个人都代表 一个岛。海盗船沿着固定的路线在岛之间航行(存在好组织的人做海盗,他们为 孩子安排了短程运输) 。 这 7

    个岛用在图 11.7 中的名字贴上标签, 或者拿着卡片, 或者穿着特殊的服装,徽章。 每个岛都有两艘离开的船,A 和 B。图 11.1 给出了可选择的地图路线。不幸 的是,海盗们不让孩子们有地图,因为他们想要保守财富岛的秘密。目的是找到 从海盗岛到财富岛的路径序列。孩子们找到这条路径的唯一方式是在岛之间旅 行, 直到他们找到了到达财富岛的路线。 例如: AABAAAB 是达到目标的一个序列, 图 11.1 中给出了到达目标的路线。 孩子们从扮演海盗岛的人开始, 并且给出他们是选择 A 路线还是选择 B 路线。 扮演岛的人都遵循图 11.8 中的指令卡片。他们利用卡片来告诉到达的孩子所选 择的路线将带他们去什么地方。例如,到达海盗岛的孩子询问路线 A 将被带到绝 路,于是孩子将继续通过询问 A 或 B 来围绕着岛走来走去。孩子以空白地图开始 ——在图 11.7——并且记录他们所走过的路线。如果没有记录路线,他们很容 易循环的走来走去。 下面一步步的描述了这个活动: 1.首先通过一个小例子说明了孩子们必须要做的。 一幅有四个岛的地图,仅有2个岛有相关的说明,如图11.2a所示,岛的卡片是在 图11.2b中。选择两个孩子(成年人帮忙更好)并给他们实例卡片,贴上海盗岛 和绝路的标签。他们必须保持一定的距离。给所有的孩子图11.7并解释 ① 是一副拥有某些岛的地图,且有 2 条路线 A 和 B 的选择 ② 目的是找到一条路径到达财富岛 ③ 使用地图中的正确路径到达财富岛会获得奖励 示范这个游戏,先来到扮演海盗岛的人旁并询问路径 A。在海盗岛的人将引 导你走向绝路。告诉孩子在地图上怎样做标记,从海盗岛到绝路画一个箭头,并 标上 A。在绝路上,再次询问路径 A。你应该直接返回海盗岛。在地图上标记这 条路径。 强调必须记下他们所走过的路径,兴奋的孩子可能会忘记所记录的路径,并 会绝望的迷失方向。而且,他们经常忘记使用 A 和 B 来标记路径,如果他们需要 再使用路径,这就会变得比较困难了。 在图 11.2 中的路径是不同于这些主要的活动,所以在该例子中使用卡片来 确保不会与将要使用的下幅地图产生混淆。 2.下面是时候来用新的路径来设置 7 个岛,并使得孩子们努力尝试着到达财富 岛。 给扮演岛的人发说明片(在图 11.8) ,并以环绕的形式安排他们(或围绕着 操场) 。如果这些人是成年人,那将是更安全的,但年长的孩子将足够快的理解。 第 7 个岛(财富岛)需要来检验地图和管理奖品。发送空白地图(图 11.7)并 把学生们一个一个的送到海盗岛。 在岛上的人们应该检查孩子们所记录的环绕路径。在财富岛的人需要检查他 们的地图是否正确(不需要完整的,但必须给出至少一条从海盗岛到财富岛的路 径)。正确的地图将获得奖励,或许是一张邮票或小物品。快速完成的孩子们需 要找到一条最合理的路径。
  45. 59 (b) 图 11.2: 小例子: (a) 地图, (b) 卡片 图

    11.3: 有回路的地图 3.在每个人都找到路径后,将孩子们聚集到一块儿,讨论他们找到的到财富岛的 路径。黑板上应该构成一个完整的地图,并且孩子们能跟踪其它路径。指出包含 循环的路径—例如,BBAAAAAB 和 BBAAAAAAAB 都能到财富岛。 4.使用不同的设计可以重复该游戏。图 11.3 给出了一个可选择的方式来表达地 图。岛按照有限数目的环绕来展示,并且最后一个岛(财富岛)环绕两次。注意 四号岛到自己的循环。这或许是没有意义的,但我们将在后面探讨它的作用。围
  46. 60 绕着岛移动的孩子们在此时能够在空白纸上画出一副地图, 将岛描绘为循环中的 数字。 孩子们将享受自己设计的地图并给出关于岛的卡片。 5.来到教室的黑板,孩子们能够探究不同的地图。图 11.4 给出了 3 条讨论的路

    线。每个示例的路线都尽量的设计出一个双倍循环的到达目的岛的一系列路径。 在图 11.4a 中的地图完成了双倍的循环(2 个岛) ,当且仅当有基数个 A 时(例 如, AB, BABAA, or AAABABA) 图 11.4b 给出了 A 和 B 的交互序列的双倍循环 (AB, ABAB, ABABAB, . . .) 。图 11.4c 需要这个序列至少包含一个 B(唯一不适合的 序列是 A, AA, AAA, AAAA, . . .) 。 图 11.4: 教室讨论的示意地图 延伸活动 不使用让孩子们发现地图的办法,给每一个孩子一个不同的 A 和 B 的不同序 列,他们能报告在哪个岛终止,如果回答正确,将收到奖励。 在不同类的地图中可使用不同的游戏和难题。例如,图 11.5 阐明可构成句 子的一种方式,通过地图来随机的选择路径并注意所遇的词。 下面的难题有一种解决方案,使用地图能清楚的展现我们使用的类型。图 11.6a 给出了通过一个自动的硬币投掷机所产生的投硬币的一个可能序列。我们 想要找出这个机器是否存在作弊行为。投掷中好象存在一个模式,但是很难发现 它。给出一个分类序列,看是否能确定一个实验模型。 使用图 11.6b 中的地图能够解释 11.6a 中的模式。按照这个序列,第一个 h 将你从岛 1 带到岛 2。第二个 h 将从岛 2 到岛 4。注意在 t 时,这不存在从岛 2 出发的路径。如果 t 已经出现,而我们还在岛 2,这就意味着我们受骗了。通过 跟踪图 11.6a 中的序列, 我们不会受骗, 并且这个模式将会用地图的结构来解释: 每个组所投的三个硬币中的前两个硬币将是相同的, 每一次的第三个硬币将是可 预测的! (从这个序列中你能够发现:每一次的第三次投掷,是以前两次的符号 而开始的,均是前面的一个拷贝, ).
  47. 61 图 11.5: 有判断的地图 h h t h h t

    h h h t t h h h h t t h t t t h h h h h t h h h t t t h h h t t t h h h h h h t t h t t t t t h t t h t t t h h h t t h h h t h h h h h h h h h t t h h h t t t t h h h h h t t t t t t t (a) (b) 图 11.6: (a) 投硬币的序列; (b) 用有限状态机解释序列 有限状态机的作用 在这个游戏中所用的“地图” ,在计算机学中称为有限状态机或简称为 FSA。 它们 (游戏中所用的 “地图” ) 在书面上经常以图表的形式出现, 如图 11.4 所示。 我们说它们由各种状态(循环)和变迁(通过箭头标示)所组成。目的是接收状 态的概验。一个确定的 FSA 是有一个确定的初始状态,从输入中一个接一个的读 取符号。在读入每一个变迁的符号后,状态将会变迁。例如,在图 11.3 中,假 设输入的是 ABAABB。我们以状态 1 开始,并且第一个 A 将我们带到状态 2。B 将 我 们带到状态 4,下一步,A 将保持在状态 4。下一个 B 将我们带到状态 3,最后的 B 将 我们带到状态 7。 虽然这个例子只使用了A和B,FSA一般与所有的字母起作用,也包括阿拉伯数字和
  48. 62 标点符号。它们不是真正的建立机器,而是用电脑程序来模拟。它们主要的作用是作为 一个思考计算机输入的认知类型的工具。例如,一个编译器是一个程序,它转化Pascal 和C描述的代码为计算机识别的代码。编译器使用有限状态机来认识部分的输入语言— —例如数字和关键字。 使用有限状态机来解释或者产生输出。假设你想要计算机来模仿人们学习一 系列符号结构的例子的方式。 你或许命令计算机来构造一个有限状态机来表达这 种类型的输入,并生成适合该类型的更多符号。投硬币的问题是这种问题的一个 例子:图

    11.6b 中的状态机是这样生成的,它通过传输图 11.6a 中的序列到一个 程序中,来寻找能生成序列的小的 FSA。这是一个简单的学习形式:计算机可能 反馈一些有缺陷的信息,示范序列,并生成一些简明的描述或者针对能预测更多 的符号序列的结实。将有限状态机使用在数据压缩中,来预测下一个输入的是什 么样的字符,而不需要显示的传输。在人机交互中 FSA 也有很大的作用,变迁能 展现一系列的人机交互性。 FSA不仅仅是计算机科学使用的抽象机器。针对不同的目的,其它的模型也 是有用的。例如push-down automaton, LR parser, 和 Turing machine。正如FSA,每一 个都是很容易描述的并展现了一种新的方法和问题促使我们处理复杂问题时, 变得更简 单。 补充读物 Harel Algorithmics和Dewdney’s Turing Omnibus都有一些章节描述了有限状态机。 John Andreae的书——Thinking with a teachable machine 介绍了非法操作投硬币的机器。 Hopcroft和Ullman在Automata Theory, Languages, and Computation中介绍了有限状态机 的理论基石。
  49. 65 活动 12 排序——编程语言 关注焦点 交流 语言 给出和采纳指令 摘要 计算机常常使用语言来控制,

    这些语言是一个必须遵守的有限词汇指令。 其中具有破坏 性的影响是计算机总是遵循字母的指令, 即使是一个不好的结果。 这个活动让孩子们体验程 序的设计 专有名词 编程语言;指令集;RISC计算 所需教材 每个孩子需具备: 铅笔,纸和磁带测试,或者某些类似测量近似的距离的工具 你需具备: 图 12.1 中的有图卡片 活动流程 1.讨论如果人们都确切的按照指令办事,这好不好?例如,假如你指着关着的门并说 穿过它, 这将会发生什么呢?电脑按照一系列的指令工作, 并且它们精确的按照指令的要求 来处理——即使它们不对(或很荒唐的) 。这个活动包含某些实验。表明,如果他们按照字 母来,给出指令是非常困难的。 2.第一个练习是传达图片。选一个孩子给他们一幅简单的图,例如 12.1 中的图(年龄越 小的孩子,像 12.1a 这样的图是合适的)。他们的任务是站在班级的前排并描述图片,目的是 使其他的孩子用自己的纸来描绘这幅图而不需要去看。 目的是看能多快多精确的完成这个练 习——这不是在班级和孩子给出指令之间进行的竞争。孩子们可以提问来弄清楚这些指令。 用一些图来重复上面的练习。你应该选择出那些复杂度与孩子们能力相匹配的图。 3.重复这个练习,这次不需班上的孩子提问。孩子们会发现变难了,因为没有机会弄清 楚,他们完全依赖那个站在前排的给出清晰指令的孩子。由于孩子们会很快摸不着头脑,对 于这个练习,最好使用一幅更简单的图。 4.现在尝试做这个练习,给指令的那个孩子藏在幕布后面,没有给任何问题,以至于唯 一的交流是以指令的形式。孩子们可能会发现,可见的交流反馈使得任务极具挑战性。 指明, 这种形式的交流与计算机编程者写程序时所经历的非常类似。 他们给计算机些指令集, 但知道以后才明白这些指令的作用。 这有助于孩子们意识到: 第一次写一个正确运行的程序 适用年级: 小学三年级以上 预设能力: 给出和采纳简单的指令 所需时间: 30分钟左右 适用人数: 2个人到全班都适用
  50. 66 是非常难的。为了进一步讨论,下面的活动流程给出一些关于计算机程序可信性的材料。 图 12.1 孩子们用来描述的一些图片 5.让孩子们写下指令来执行一个已给的任务:构造一个纸飞镖或达到某些特别的地方, 能够扩展这个练习。 例如,他们相互之间能写出这样的指令:使用唯一的指令形式“向前 X 米”,“左转”(90

    度) ,“右转”(90 度) ,如何到达一个学校周围隐蔽的位置。他们采纳了彼此的指令并估计 了这些指令有多精确。鼓励孩子们修改他们的指令知道他们得到期望的结果。 在计算方面,一个重要的问题是那些可用的不同指令的数目。例如,可以去掉上面说的 “右转”指令,因为“左转”3 次可以得到相同的效果。讨论权衡用许多可用的指令(更快指定 一条道路)还是仅用一些(更容易记住他们,但需要更长的指令序列) 。 问孩子们,为了穿过校园,他们想要用哪些可用的指令。用一个有限的指令集,他们能 想出那些不能到达的地方吗?(例如,如果没有上升的指令,到达一间楼上的房间是不可能 的。 )
  51. 67 变换与拓展 通过一些从小而特殊的词汇中得出的指令,可以描述出行动的所有方法。例如,利用像 “向上一个书架”,“指向那个书架上的第一本书”,“指向下一本书的右边”等这些指令,孩子 们能在图书馆找到书。 孩子们能构造他们自己的有限指令集, 然后用这些指令集描述一个行 动。主要的要素是必须写下指令,提前给出指令,并精确的使用指令。 这种指令的其他例子包括成块方法和组织模式。 相关知识

    通过使用称为“程序”的指令集,计算机运行。所写的“程序”用来执行特定的任务—— 不论是文字处理,清算账目,玩游戏,或是控制一座核电厂。为控制计算机的运行,设计了 一些用各种语言写的程序。已存在许多不同语言,如 Ada,BASIC,C,C++,COBOL, FORTRAN,LISP,Pascal 和 RPG。每一种语言都有一套限定的指令集,用这些指令提供的 词汇,编程者详细说明了他们想让计算机做什么。原理上来说,如果一项任务能用一种语言 编程,它也就能用其他的语言编程。在计算机科学中,这是一个重要的概念,即“教会图灵 论文”。然而,某些语言比其他语言更适合某些目的,因此,显示了发明语言的明显不同。 不管他们使用哪种语言,编程者必须易于精确地详细说明他们想要计算机干什么。不 像人,计算机将一个字母一个字母的执行指令,甚至这些指令明显不正确。当人考虑自动收 款机的计算机程序出错的后果,航天飞机发射,核电厂的控制,或火车跟踪信号时,指令正 确的重要性变的更清楚。甚至,文字处理程序的一个错误能弄跨一家软件公司,如果他们的 程序使人们的日常工作失去了常规。 为向一种蛀虫表示敬意, 这些错误通常叫做“程序缺陷”, 在 19 世纪 50 年代早期的电子计算器中,这种蛀虫已经从电延迟中去除(“debugged”)了。 大规模的计算机软件系统不可能无缺陷。这变成了一个重要的问题,当美国曾从事战 略主动防御(“星战”)程序研究的时候,计算机控制系统用来形成核攻击不能穿过的防御。 一些计算机科学家声称该软件系统会失效, 因为系统的复杂性和系统所需的软件所固有的不 可靠性。软件需要细致的测试,尽可能的查找程序的缺陷,但测试该系统是不可能实行的, 因为这必须对美国发射导弹,才能确认该系统正常运行! 采用所有指令都可行的大而复杂的编程语言,还是采用仅有一两个指令的小而简单的 编程语言,这有一个折中的方案。这个折中的方案起因于训练中的一个小方法,该方法中可 以移除“右转”指令,因为通过执行三次左转的指令可以实现同样的效果。复杂语言的优点是 最终的程序通常比较短,因此也比较容易了解。精简语言的优点是容易学习,并且计算机执 行该语言的效率高。所谓的精简指令集计算机(RISC 计算机)使用很少的指令集,因此这些 指令执行速度快, 相反的是复杂指令集计算机(CISC)。 幸运的是, 我们很少使用削减的 RISC 语言, 因为系统是有效的 (所谓的编译器) , 将用语言编写的程序转化成人们易于阅读的 RISC 语言,该语言在计算机上可以有效的运行。 因为 RISC 计算机能被构建成“倾斜度和平均数”, RISC 计算机的运行速度通常比较快, 比传统的 CISC 计算机更有利。然而,人们趋向使用内容更丰富的编程语言,这些编程语言 能生成短而好的程序,这些程序可以自动编译成 RISC 计算机能使用的格式。 补充读物 Harel 在 Algorithmics 的第三章讲述了编程语言。
  52. 68 活动 13 贫穷的制图师——图形着色 关注焦点 问题解决 逻辑推理 算法过程和复杂度 洞察力的交流 摘要

    很多优化问题包括这些情况, 比如某些事件不能同时发生, 或者一个对象集合中的某些 成员不能相邻。 例如, 人们在按照时间表上课或者开会的时候遇到的问题就必须满足这个限 制。很多这类难题与地图着色问题类似,在这个问题中,所选择的颜色在对地图中的国家进 行着色时必须使得相邻的国家有不同的颜色。 这个活动 (activity) 就是针对这个问题进行的。 专有名词 图形着色;指数级时间算法;启发式 所需教材 你需要给每个学生准备:一份资料,如图 13.8 到 13.11 所示;可活动的彩色标识(筹码 等) ;4 个不同颜色的蜡笔(或者彩色铅笔等) 还需要:一块黑板或者类似黑板的可在上面进行书写物体。 活动流程 这个活动围绕着一个故事,孩子们要帮助这个故事中的制图师(或 map-maker)来对一 个地图上的国家进行着色。 每个国家被涂成什么颜色没有关系, 但是每个国家的颜色要和与 它相邻的国家的颜色不同。例如,图 13.1 中的四个国家,如果我们把 Northland 涂成红色, 那么 Westland 和 Eastland 就不能是红色了, 免得这两个国家与 Northland 的边界不容易辨别。 我们将 Westland 涂成绿色;而把 Eastland 涂成绿色也是可以的,因为它并没有和 Westland 接壤(如果两个国家的地图只是有一个点是公用的,那它们不算接壤,因此可以涂成同一种 颜色) 。Southland 可以被涂成红色,最终我们可以发现只需要两种颜色就可以对这个地图进 行着色。 在我们的故事中,这个制图师是贫穷的,他不能供应得起很多蜡笔,因此需要采用一个 尽可能少的颜色来对地图进行着色。 适用年级:小学以上 预设能力:填色 所需时间:30 分钟或稍多 适用人数:适合整个班级中所有人
  53. 69 图 13.1 一个将被着色的简单地图 图 13.2 只用两种颜色对图 13.8 中图形进行着色的方案 1.

    向孩子们描述他们将要解决的问题,在黑板上用图例解释着色的过程。 2. 分发图 13.8 的图片。这个地图可以只使用 2 种颜色进行正确着色。虽然把颜色的种类限 制为两种听起来很有难度,但是这个工作与采用很多颜色对地图着色相比就非常简单 了,因为每个国家的颜色几乎不用选择。 让孩子们试着只用两种颜色对地图进行着色。在这个过程中,他们可能会发现这个 “不得不”的规则:一旦一个国家采用一种颜色进行着色以后,任何其他接壤的国家将 必须采用另外一种颜色。这个规则将一直被重复使用,直到所有的国家着色完成。最好
  54. 70 孩子们可以在着色的过程中自己发现这个规则,而不是被告知这个规则,因为这个可以 在这个过程中更好的锻炼他们的洞察力(insight) 。图 13.2 给出了 138 的地图中的唯一 的可能解决方案 (当然,

    具体选择哪种颜色由孩子们来定, 但是只需要两种不同的颜色) 。 孩子们也可能会发现最好使用位置标识器(place-holders) ,比如彩色筹码,而不是 直接把地图上的国家进行着色,因为这样会让他们在改变想法的时候比较容易改变地图 的着色。 图 13.3 只使用 3 种和 4 种颜色分别对图 13.9 中的地图进行着色的方案 3. 当孩子们完成前面的每个练习时,可以给他们下一个练习。图 13.9 中的上面的这个地图 可以使用 3 种颜色来正确着色,而下面的这个地图需要 4 种颜色。在图 13.3 中给出了一 种可行的方案。在图 13.10 中的地图是一个更简单的三色地图,图 13.4 给出了一种可行 的解决方案。 询问每个孩子,让他们解释他们怎么知道自己已经找到了最少的颜色数目了呢。例 如,图 13.4 中的地图至少需要 3 种颜色,因为这个地图包括一个三个国家的组(最大三 个)——组中的每个国家都与另外两个国家有接壤。 4.如果某个孩子较早的完成了所有的地图,让他试着去设计一个至少需要 5 中不同颜色的 地图。已经得到证明的是任何地图都可以只用 4 种颜色进行着色,因为这个任务(task) 将困扰孩子们一段时间。按照我们的经验,孩子们将很快给出一些他们认为需要 5 种颜 色来进行着色的地图,但是可以肯定的是,总可以找到只用 4 种颜色就可以对他们给出 的地图进行着色的方案。
  55. 71 图 13.4 只使用 3 种颜色对图 13.10 中的地图进行着色的解决方案 变换与拓展 有一个简单的构造只需要两种颜色就可以着色的地图,比如图

    13.11 中的地图(解决方 案如图 13.5 所示) 。这个地图通过闭合曲线(就是线的开始端和末端相连)之间的覆盖而得 到。你可以画任意多的这种曲线,任意形状,彼此间互相覆盖,最终你将总得到一个可以用 两种颜色进行着色的地图。孩子们可以试着连词构造这种地图。 四种颜色足够对一张纸或者一个球体(如地球仪)上的地图进行着色。有人想知道(如 请科学家来研究)画在一些奇怪的物体表面(比如圆环面——油榨圈饼的形状)上的地图需 要多少颜色来着色。这种情况下,可能需要 5 种颜色,并且 5 种颜色总是够的。孩子们也许 喜欢做这种实验。 在图形着色问题中, 还有很多有趣的变化, 而这变化得到的问题也许目前还没有人知道 答案。例如,如果我一个人对一张纸上的地图进行着色,那么如果我足够聪明的话,四种颜 色将足够。但是假设我不是一个人工作,而且并且我是和一个能力不强的(甚至是敌对的) 搭档一起工作。假设在我们轮流对一个地图上的国家进行着色时,我很聪明地工作,而我的 搭档的工作只是“合法”而已。在工作台上放多少蜡笔才能让我的聪明弥补搭档的“合法” , 而又不需要非常多(bright) (甚至破坏性的)的移动(moves) 。目前,我们知道 33 支蜡笔 就足够了,但是我们不知道事实上是不是需要那么多。 (专家推测不到 10 种颜色就足够。 ) 孩子们可能喜欢做类似的事情,因为这更像是一个两人的游戏。
  56. 72 图 13.5: 只使用 2 种颜色对图 13.11 中的地图进行着色的方案。颜色在这个图形中被表示 成阴影和白色。 其中一种变化情况,比如帝国着色问题(empire

    coloring) ,我们准备好两张分别画有相 同数目的国家的不同地图。其中一个地图(比方说,地球)上的每个国家严格的与另外一个 地图(比如月球上的群体)上的国家匹配。除了常规的对相邻国家要选择不同的颜色进行着 色的要求之外, 我们又增加了一个要求那就是地球上的每个国家着色时所选择的颜色必须要 与月球上其对应的群体选择同一个颜色。 这个问题需要多少种颜色呢?目前还没有人知道答 案。 相关知识 我们在这个活动中探究的地图着色问题在本质上是寻找对一个具体的地图着色时所需 要的最小的颜色数目——2 个、3 个还是 4 个。任何地图都可以只用 4 种颜色来对其进行着 色的推测在 1852 年就被提出, 但是一直到 1976 年才给出证明。 计算机科学中有很多尚未解 决的问题, 这个四色理论问题在被研究了 120 多年以后才被解决, 而这对于那些研究一些尚 待解决的问题几十年却没有得到答案的研究者来说是一个鼓励。 地图着色属于已知的“图形着色”问题这一大类。在计算机科学中,图是关系的抽象表 示法。如图 13.6 所示。
  57. 73 图 13.6 一个图例 在活动 9 中(Muddy City)提到的术语“graph”用来表示数据时有这不一样的意义, 比如一个条形图(bar graph)

    ,在计算机科学中使用的“graph”与这些没有关系。在计算机 科学中,图是使用圆圈或者大的圆点(dots)来画出的,学术上称为“节点” ,用来表示对 象,在节点之间的线条用语表示对象之间的某种关系。图 13.6 正好可以表示图 13.1 中的地 图。节点表示国家,两个节点之间的线条表示两个国家共享一个公共边。在这个图中,着色 规则就是不相连的节点应该分配相同的颜色。 地图对颜色的种类数没有限制, 而图不是这样, 因为很多不同的限制可以画作相连的线, 然而这个二维的属性也许会限制可能的排列。 这个 “图形着色问题”的母体就是针对一个具体的图形找出所需要的最少的颜色数目。 图 13.7 另一个图 图 13.7 给出了另一个图,这里节点对应学校里的学科。在两门学科之间的线条代表至 少一个学生同时选了这两门课程, 因此不同把这两门课排在课程表的同一个时间。 使用这个 表示法, 在最短的学时中找到一个合适的课程表的问题就等价于着色问题, 其中不同的颜色 对应不同的学时。 计算机科学中的图形着色算法充满趣味性, 虽然它们可能从来没有用于地 图的着色中,但是已经被用于一些实际的问题中!我们贫穷的制图师只是一个虚构。 有成千上万个基于图的问题。 在本书中其他地方也有一些此类问题的描述, 比如在活动 9 中最小生成树和在活动 14 中的最小控制集。图是表示数据的一个常用的方式,能够用于 表示所有种类的情况,比如在城市间旅游时的可选路径,分子中原子的连接,通过一个计算 机网络的信息的通道,在一个印刷电路板(pcb)上元件之间的连接,以及在一个大项目中
  58. 74 的各子工程的关系。 正是这个原因, 包含图形表示法的问题长期以来一直令计算机科学家着 迷。 很多这类问题常常是很难的——不是难在概念上, 通常难在要花费非常多的时间来解决 这种问题。 例如, 为了确定一个中等大小的图形着色问题的最有效的解决方案——比如给一

    个拥有 30 名教师和 800 名学生的学校排出一个最合适的课程表——将花费数年甚至几个世 纪的时间, 即使是使用计算机并且采用一个已知的最好算法。 等到得到这个问题的答案时也 许这个问题已经不重要了——而且还要假定计算机在完成工作之前没有停顿或者用坏才能 得到答案。这种问题只是在实际中可以被解决,因为我们在实际中只需要一个次优的,但是 仍然挺好的解决方案。 如果我们坚持要保证得到一个最优的解决方案, 那么问题将相当难处 理。 在解决着色问题时, 所花费的计算机时间将随着图尺寸的大小呈指数级增长。 考虑下地 图的着色问题。 只有在试验了所有对图着色的可能方式以后才能得到最后的答案。 我们知道 最多只需要 4 种颜色,因此我们需要尝试将这 4 种颜色分配给国家的所有组合。如果有 n 个国家,那么将有 4n 个组合。这个数字增长的非常迅速:每增加一个国家将使现有的组合 数目乘以 4, 并导致得到解决方案的时间增加 4 倍。 即使所发明的计算机能够处理这种问题, 比如能够在一个小时时间内处理 50 个国家的着色问题,那么在增加一个国家将花费 4 个小 时的时间,而我们只需要在增加 10 个国家就会使得这个计算机花费超过一年的时间才能解 决这个问题。 我们之所以还能够处理这类问题只是因为我们不断的发明了处理速度越来越快 的计算机。 图形着色就是这类得到解决方案的时间随着问题的复杂度呈指数级增长的问题的一个 很好的例子。 这种问题的简单例子, 比如活动中用到的小地图就非常容易得到最优的解决方 案,但是一旦国家数超过 10,这个问题就将很难通过人工来处理;如果国家数超过 100 的 话,那么即使一台计算机也将花费数年的时间来处理。 很多实际问题的复杂度与此类似,但是必须要解决。应用计算机科学院使用一些好的, 但是不是最优的答案的方法。这些启发式的技术常常接近最优,能够便于快速计算,并给出 对实际问题来说足够精密的答案。如果课程表不错的话,学校可以忍受多使用一个教室;如 果不是绝对严格的话,也许这个可怜的制图师可以多负担一种颜色。 没有人能够证明使用常规的计算机找不到有效的方法来解决这类问题; 也没有人能够证 明可以找到一个有效的方法, 计算机科学家就怀疑是否可以做到这一点。 在下面的两个活动 中,我们将了解更多的关于这类问题的知识。 补充读物 Harel 讨论了四色理论,包括其历史(in Algorithmics) 。Casey 和 Fellows 在“This is MEGA-Mathematics! ”中讨论了有关地图着色问题的很多方面。更多图形着色的知识可以参 看 Beineke 和 Wilson 所著的书 《Selected Topics in Graph Theory》 以及 Garey 和 Johnson 所著 的《Computers and Intractability》 。
  59. 77 活动 14 旅行城镇——支配集 关注焦点 地图 关系 解决难题 迭代目标搜索 摘要

    很多实际生活中的情形可以抽象成图在活动 13 中用于着色的这类网络或者“图”的形 式。网络提供了很多研究一些实用的算法的机会。在这个活动中,我们想对一些交叉点,或 者说是“节点”做标记,以使得所有其它的节点到这些已经做了标记的节点处只有一步的距 离。 问题是, 我们怎样才能得到这个需要标记的最小的节点集呢?这个问题已经被证明是一 个非常难以解决的问题。 专有名词 图;支配集;NP 完全问题;蛮力攻击算法;贪婪算法。 所需教材 每组孩子需要:一份图 14.3 中的材料和一些 2 种颜色的筹码。 你将需要:一个放映机来放映图 14.4 所示的幻灯片或者用一个黑板来画出这些图形。 活动流程 图 14.3 给出了一个旅游城市的地图。线条是街道,黑点是拐角处。这个城镇处于一个 非常炎热的国家,在夏季,冰激凌销售车停在街道的拐角处出售冰激凌给游客。我们想放置 一些销售车, 使得每个人可以至多走一个街道的距离, 通过走到街道的终端来到达一个销售 点。 (想象人们生活在十字路口比生活在街道两旁更容易想象;这样,他们必须能够通过走 最多一个街道的距离得到冰激凌。 )问题是需要多少个销售车,以及这些销售车应该放在哪 些十字路口? 1. 将孩子们分成几个小组, 给每组一张旅游城市地图和一些筹码, 并且解释这个故事。 2. 向孩子们演示如果放置一个筹码在一个十字路口,用于标记一个销售车;然后放置 另外一种颜色的筹码在旁边的一个十字路口。人们生活在这些十字路口(或者靠近 这些十字路口的街道边)可以就近买到冰激凌。 3. 让孩子们试着把销售车放在不同的地方。在他们放置销售车的时候,提醒孩子们这 些销售车是昂贵的,因此我们要使用尽可能少的销售车。显然,如果有足够的销售 车保证每个十字路口都有一个销售点,那么肯定可以满足需要——令人感兴趣的问 题是怎样找到需要最少的销售车的放置方法。 4. 这个旅游城镇所需要的最小的销售车数是 6,一种放置方案如图 14.1 所示。但是很 难找到这个方案。过一段时间以后,告诉班上同学 6 辆销售车将足够,让他们来找 适用年级:小学三年级以上 预设能力:能使用一幅简单地图 所需时间:一个或者多个 30 分钟左右的会议 适用人数:从一个人都全班都适用
  60. 78 出一种放置方法。这仍然是一个非常难的问题:很多组将最终放弃。即使是需要 8 或者 9 辆销售车的方案都将很难找出。 图 14.1 旅游城镇的冰激凌销售车问题解决方案 5.

    这个旅游城镇的地图由图 14.4 给出的 6 个小地图连接而成, 每个小地图很明显的只 需要一个冰激凌销售车,用街道将它们连接到一起就得到了这个方案。主要的问题 是不要在方案十字路口(图 14.3 中的空心点)防止连接,而是只对另外的十字路口 进行连接(实心点) 。 6. 让孩子们采用这种方法来构造他们自己的复杂地图。他们也许想在他们的朋友和父 母那里试验,通过设置一些他们能解决而别人不能解决的难题来快乐。这些是一些 所谓的“单向函数”的例子:容易构造这些难题,可是很难解答——除非你就是开 始的创造者。单向函数在密码学(活动 17,18)中起着非常重要的作用。 变换与拓展 人们在城镇规划中常常遇到各种类似的问题:安置油箱,井,救火中心等等。在实际的 生活中,这个地图不会基于上面提到的技巧,因此不会像前面那样那么容易解决。如果你真 要必须解决类似的问题时,你应该怎么做呢? 有一个直截了当的方法: 考虑所有的放置冰激凌销售车的可能情况, 然后检验哪种是最 好的。在这个旅游城镇的 26 个街道拐角中,放置一个销售车有 26 种放置方法。很容易检验 这 26 种放置方法,很明显没有一种满足要求。如果有两辆销售车,那么有 26 个地方可以放 置第一辆车,这样一来,除掉放置第一辆车的地方,还有 25 个地方来放置第二辆(很明显, 你不会把两辆车放置在同一个交叉点) : 将有 26*25 种可能性要检验。 每个检验都是容易的, 虽然完成这个过程比较乏味。事实上,你只需要检验其中的一半(325) ,因为这两辆车中的 哪一辆放置在一个地方是无关紧要的: 如果你已经检验过销售车 1 在交叉点 A 处和销售车 2 在 B 处的情况,那么就没有必要检验销售车 1 在交叉点 B 处和销售车 2 在 A 处的情况了。 你也可以检验三辆销售车(2600 种可能情况)和四辆销售车(14950 种可能情况)等等。
  61. 79 图 14.2 一个简单的放置冰激凌销售车问题的城镇 很明显,26 辆销售车将是足够的,因为只有 26 个交叉点,而且没有一个拥有多于一辆 销售车的地方。另外一种计算可能情况数量的方法是考虑 26

    个交叉点和任意销售车数量的 配置的总数。 因为对于任意一个街道拐角都有两种可能性——可能有一辆销售车或者没有— —配置的数量是 226,也就是 67 108 864。 解决这个问题的方法叫做“蛮力攻击”算法,需要花费很长的时间。很多人有这样一个 误解, 他们认为计算机运算速度非常快而且可以很快的计算出任何东西, 不管这个问题包括 多大的工作量。但是,这不是真的。这个蛮力攻击算法花费的时间取决于在检验是否一个具 体的配置是正确的解决方案时的计算机的处理速度。 要检验这个问题, 其中包含测试每个交 叉点到最近的销售车的距离。 假设一个完整的方案需要一秒种的测试时间。 对于旅游城镇的 226 种可能性需要多少时间呢?(答案:226 大约为六千七百万;一天有 86400 秒,因此 226 秒大约是 777 天, 或者大概 2 年。 ) 假设检验每种具体的配置的时间用千分之一秒来代替一 秒,那么两年时间将可以用这个计算机来解决一个有 36 个交叉点的城镇问题,因为 236 大 概是 226 的一百倍。即使计算机速度快一百万倍,使得一秒种可以检验一百万个配置,那么 也将花费两年的时间来处理一个具有 46 个交叉点的城镇。 而且这还不是非常大的城镇! (你 所居住的城镇有多少个交叉点呢?) 蛮力攻击算法的效率非常低, 那么有没有其它的方法来解决这个问题呢?好吧, 我们可 以来试验一下曾经成功地用在 muddy city(活动 9)中的贪婪算法。我们需要考虑怎样来贪 婪地获取冰激凌——我的意思是说如何将贪婪算法用在这个冰激凌销售车的问题中。 使用这 个算法的方法是把第一辆销售车放在连接最多街道数目的交叉点处, 第二辆放在下一个类似 的交叉点处,如此类推。但是,这不能保证一定得到一个冰激凌销售车放置方案的最小集— —其实, 在这个城镇中连接最多街道的交叉点——有五个街道并不是放置这个销售车的最合 适的地方(可以检验用这个方法得到的配置) 。 让我们看一个简单的问题。 现在不是让你找到一个需要最小数量的配置, 假设给你一个 配置并且让你判断它是否为一个最小配置。在一些例子中,这个问题很简单。比如,图 14.2 给出的这个非常简单的地图, 它的解决方案就非常直接。 如果你将这些街道想象成一个立方 体的边,那么很显然放置在立方体的斜对角线上的两辆冰激凌销售车将足够。甚至,你还可 以验证用少于两辆销售车来解决这个问题将是不可能的。 去证明旅游城镇需要的冰激凌销售 车的数量不能低于 6 辆这个问题将是非常困难的——虽然不是不可能。 对于一般的地图, 要 证明某个冰激凌销售车配置是最小集都是极其困难的。
  62. 80 相关知识 有关这个冰激凌问题的其中一个有趣的事情是没有人知道是否有一个算法可以明显的 优于蛮力攻击算法来得到一个最小的安置集。 蛮力攻击算法所需要的时间随着交叉点数量的 增加而呈指数级增大——这被称作指数级时间复杂度算法。 一个多项式时间复杂度算法是指 运行时间随着交叉点数量的增加呈平方或者立方或者十七次方或者任何其它幂级数的增长。 一个多项式时间复杂度算法对足够大的地图来说总是比较快的——即使是和一个十七次方 时间复杂度算法相比——因为一个指数级增长的函数在它的参数足够大的时候将超过任何

    多项式复杂度增长的算法。 (例如,你可以计算一下,是否 n 大于 117 就一定有 n117 小于 2n 呢?) 。是否有一个多项式时间复杂度算法来得到放置方法的最小集呢——没有人知道,虽 然人们已经很努力的试图找到一个这样的方法。 对于检验是否某个具体的放置方法这个看起 来简单的问题也是一样: 通过尝试所有的可能情况来找到较小的放置方法的蛮力攻击算法也 随着交叉点数目的增加呈指数级增长, 也没有人曾经发现一个多项式时间复杂度算法, 也没 有人能证明这个算法不存在。 不知道这有没有使你回想起地图着色问题(活动 13)?应该可以想到。冰激凌销售车 问题,正式地被称为“最小支配集”问题,是数量众多的不知道多项式时间复杂度算法是否 存在的问题中的一个,属于逻辑上的广泛搜索的范畴,类似地图着色的排列问题,寻找地图 上的最优路径以及进程调度。另人惊讶的是,所有的这些问题意义相当,如果对其中的一个 问题找到一个多项式时间复杂度算法的话, 那么这个算法也可以转化成针对其他问题的算法 ——可以说它们是共进退。 这些问题称为 NP 完全问题。NP 代表“不确定的多项式” 。这个行话(jargon)意味着 如果你有一台可以立刻计算出任意大型的方案的话, 那么这个问题就可以在我们能接受的时 间内完成。你也许会认为这是一个美丽的但是不现实的假设,确实如此。不可能生产出这样 的计算机,因为问题将不得不超级大。但是,这种机器的概念在原理上是重要的,因为它表 明了 NP—complete 问题用一个固定处理能力的计算机在可以接受的时间内是不能解决的。 更进一步,这组问题之所以称为 complete,是因为虽然这些问题看起来非常困难——例 如, 地图着色与安置冰激凌销售车差别很大——但是它被证明如果得到解决其中一个问题的 方法的话,那么这个方法可适用于解决其余的问题。这就是我们所说的“共进退” 。 存在成千上万的 NP—complete 问题,研究者们努力探讨它们来寻找有效的方案,几十 年来都没有成功。 如果这些问题中的其中一个有了有效的解决方案, 那么对所有的问题都有 了解决方案。基于这个原因,有人怀疑没有有效的解决方案。但是证明这些问题必然需要指 数级的时间是今天计算机理论科学,可能可是所有的数学分支中最显著地开放性问题。 补充读物 Harel 在《Algorithmics》一书中介绍了几个 NP—complete 问题并讨论了多项式时间复 杂度算法是否存在的问题。Dewdney 在《Turing Ommibus》一书中也讨论了 NP 完全性。关 于这个主题的标准的计算机科学课本是 Garey 和 Johnson 的《Computers and Intractability》 , 其中介绍几百个 NP 完全性问题,及其证明 NP 完全性的技术。但是,这本书相当难懂,确 实是只适合计算机科学专家。
  63. 82 活动 15 冰冻之路—Steiner 树 年龄组:小学三年级以上 预测能力:能测量及将几个串的长度加起来。这些孩子需要能够把这些线绑到钉子上去。 所需时间:20 分钟或更多。这些活动需要有着晴朗的天气这样孩子们可以到户外的草地上 进行。

    适用人数:从一个人到全班以 3 或 4 个组成一个组进行。 关注焦点: 空间形象化 几何推理 算法进程和复杂度 摘要 在详述一个问题时,有时候一个表面上不重要的小变化使得其解决的难度有很大的区 别。这次活动,像泥泞的城市问题(活动 9) ,是关于通过网络寻找最短路径。这些区别是 在这里我们允许插入新的点到网络中, 如果这样做能够使得网络的路径更短的话。 这个结果 是为更难解决的问题, 因为这和泥泞的城市问题没有什么关联, 但是其算法和绘图者难题 (活 动 13)以及旅游镇的算法(活动 14)同样难以实现。 专有名词 Steiner 树;最短路径;NP 完全问题;最小生成树;网络 所需材料 每个组的学生需要: 5 或 6 个钉子标记在地面上(帐篷桩是好的,虽然挂衣架切开了,然后被弯曲了的) 几米长的线或橡胶 直尺或卷尺,笔和纸去笔记 活动流程 先前的活动,旅游镇,发生在一个很热的国家;这次活动则相反。在冻结的加拿大北部 (真相确实如此) ,在巨大的结冰的湖的冬天,由雪犁开路才能连接各个站点,也使成员组 能互相拜访。 在那里他们想要做最少的道路建筑物, 而你的工作是要计算出该在哪建这些路。 没有任何限制:在雪上高速路可以到达任何地方,而湖面被结冰覆盖,地面都是平坦的。 路应该明显的平坦舒展, 因为增加弯度只会增加不必要的长度而已。 但这并不像简单的 用直线连接所有站点,因为增加交叉点冻结的的浪费有时将减少总路程的长度—----总的长 度是重要的,而不是从一个点旅行到另一个点的时间。 图 15.1a 显示三个站点。连接其中的一个点到其他各个点(如图 15.1b)将得到一个可 接受的道路网络。 另外一个可能是使一个交叉点在三角形中心附近某处然后连接到它的三个 点(图 15.1c) 。如果你测量这些已经清除了的路的总和,这确实是一种更好的解答。在瑞士 数学家雅可比施泰纳(1796-1863)之后这个额外的交叉点叫做“施泰纳”点,雅可比阐述 这个问题并且是第一个注意到总长度可以通过增加新的节点而减少。 你可以认为施泰纳点是 一个新的,虚拟的点。 图 15.1:在冰路中连接三个点: (b)是可以的,但(c)会更好一些的
  64. 83 图 15.2 在冰路中连接 4 个点: (b)是可以的, (c)更好一些,而(d)则比(c)更好 1. 描述孩子们将研究的问题。使用图

    15.1 中的例子的三个点向孩子们阐明,当能 减少总的路线长度时就可以增加一个新的点进去改进其解。 2. 孩子们将使用正方形里的 4 个点,如图 15.2a 所示。到外面让每个组在草地上的 大约 1 米*1 米的正方形里安置 4 个钉子。 3. 让孩子们试验用线或橡皮将钉子连接起来,测量和记录所需要的最小总长度。在 这种情况下他们不应该使用任何的施泰纳点。 (极小值通过连接正方形的三边得 到的,如图 15.2b 所示,总的长度为 3 米。 ) 4. 现在看如果孩子们在使用施泰纳点后能做得更好。 (最好的位置是正方形的中心, 如图 15.2c 所示。总的长度是 2 2 2 =2.83 米。 )假设如果使用两个施泰纳点他们 能做得更好。 (事实上就是这样,如图 15.2d 中通过取代两个点,在两条进来的 路中形成 120°的角。总的长度为 1+ 2 3 =2.73 米) 5. 通过 3 个施泰纳点孩子们是否能做得更好一些呢?(两个点是最好的。使用更多 的点没有更多的好处。 ) 6. 和孩子们讨论为什么这些问题看起来很难。 (这是因为你不知道该在哪放入施泰 纳点,而却有很多的可能去试。 )
  65. 84 图 15.3:在长方形中连接各个点: (b)是可以的, (c)不是很好,而(d)是最好的 变换与拓展 1. 及早完成原始活动的小组的一个有趣实验是用一个 1*2 米的长方形进行实验的

    (如图 15.3) 。 这些学生将发现增加一个施泰纳点将使事情更糟, 但加入两个施 泰纳点可以使问题的解有所改进。图 15.3b 中的长度为 4 米,图 15.3c 的长度为 2 2 5 = 4.47 米,而在图 15.3d 中的长度为 2+ 2 3 =3.73 米。)看到如果他 们能找出为什么在长方形中一个点的配置比在正方形中坏得多。 (这是因为 当正方形如图15.2 延伸到图15.3 的长方形, 延伸的总量在图 15.3b 和度15.3d 中增加一次,但在图 15.3c 中的两条对角线都增加了。) 2. 年龄较大的学生可以研究更大的问题。 连接冰路的点的两张布局的框架图在 图 15.10 和图 15.11 给出。他们可以通过用框架图中的新的副本或用自己带 的可擦除的笔在框架图上面的空白处自己画进行实验得到不同的解。 (第一 个例子的最小解答在图 15.4, 当第二个有两种可能的解, 其总长度是很相似 的,在图 15.5 中显示)
  66. 85 图 15.4:第一个例子的最小 Steiner 树 图 15.5:第二个例子的两种可能的 Steiner 树 图

    15.5 阐明为什么这类问题这么难—因为有太多的选择而难以确定施泰纳 点放在哪! 3. 梯子网络如图 15.6 提供另一种方式来扩展这个问题。有些最小 Steiner 树如图 15.7 所示。那个二阶梯子如同一个正方形。然而,三阶梯形的解却大不相同—-- 你将发现如果你试着从记忆中描绘出来!四阶梯形的解如两个二阶梯形连接起 来,同样的,对于五阶梯形更像三阶梯形的扩展。一般说来,梯子网络的最小 Steiner 树的形状取决于它含有偶数还是奇数的环。如果是偶数,它就像几个二 阶梯子叠加起来的。否则,它就是重复着三阶梯子的解答。但要严格的证明这 些事情是不容易的。 图 15.6 六阶梯子
  67. 86 图 15.7 二、三、四、五阶的最小 Steiner 树 图 15.8 用肥皂泡做一棵 Steiner

    树 4. 另外一个有趣的活动是创建 Steiner 树的肥皂泡模型。 你能通过用两块刚性透明 塑料和在他们之间插入别针代表要跨过的站点来完成的,如图 15.8 所示。现在 将整个事件浸入肥皂解。当其结果出来,你将发现一部肥皂薄膜连接在一个美 好的 Steiner 树网络。 不幸的是,然而,它并非需要最小 Steiner 树。这肥皂薄膜并没有找到最小路径
  68. 87 总和的配置,但最小长度可以是局部的,而并非是全局的。可能将存在完全不 同的方法摆置施泰纳点可以得到更小的总长度。例如,你可以想象肥皂薄膜看 起来像图 15.5 中当它从液体中抽出的时候的第一次配置, 另一次为第二次配置。 相关知识 我们一直研究的网络就是最小 Steiner

    树。把他们叫做“树”是因为他们没有回路, 仅仅像树上的树枝而没有与新的树枝再连接起来。因为有新的节点所以叫做“施泰纳” 点,施泰纳点,可以添加到树相互连接的原始节点。而把他们叫做“最小”是因为他们 有着所有树连接那些节点的最短距离。在泥泞的城市(活动 14)我们明白一个网络连 接一定数量的站点总的距离最短叫做最小生成树;除了新的节点可以添加进来之外 Steiner 树和最小生成树其实是一样的。 当有非常高效的算法寻找最小生成树(活动 14)的时候是非常有趣的—贪心算法 是一个通过重复连接两个靠近的还没有连接的点—--最小 Steiner 树没有普遍有效的解 决方法。Steiner 树(比最小生成树)更难,因为你必须确定在哪里添加额外的节点。 事实上,令人惊讶的是,Steiner 树的困难部分并不是确定施泰纳点的精确位置,而是 大概的确定将他们放入哪儿:例如,两种解的区别如图 15.5 所示。一旦你知道在哪些 区域放入新的点,把他们调到最佳位置相对简单。用肥皂薄膜做非常有效,计算机也能 够做。 令人惊讶的是,找到最小 Steiner 树在电话业务方面可以节省很多的钱。在美国当 企业的顾客经营大型的私人电话网络时, 我们从电话公司租用电话线。 他们支付账单的 数额,是不计算(包括)基础的电线如何使用的,但要计算最短的基本网络的花费的。 理由是顾客不必付额外的费用因为电话公司使用一个环绕线路。 开始, 这个算法计算通 过定义最小生成树的花费。然而,它仍被一个顾客注意—-在一家航空公司,实际上, 用 3 个主要集线器—如果另外的集线器可以创造一个中间点,那么总的路程就可以减 少。如果在施泰纳点有一个电话交换这个电话公司就可以减少他们本来该投入的费用! 然而,对于典型的配置,最小 Steiner 树仅仅比最小生成树少 5%或 10%,当涉及大量的 钱的时候这是值得节省的。Steiner 树问题有时候叫做“最短网络问题” ,因为它涉及在 一个点集合中寻找最短网络。 如果你已经攻克了前两次活动中制图员困惑和旅游镇问题,当听说最小 Steiner 树 问题是一个完全 NP 问题你将不会觉得奇怪。随着站点数目的增加,施泰纳点可以放的 可能位置也随着增加, 而试图寻找所有可能的位置点涉及一个指数增长的搜索。 这只是 很多问题中根本不知道指数搜索是否是能够做当中最好的的另一个而已, 或是否有一个 尚未发现的多项式时间复杂度的算法。众所周知的,但问题在于,如果能为这个问题找 到一个多项式时间复杂度算法, 这将变成用一个多项式时间复杂度算法来解决为图着色 问题、为寻找最小支配集问题—同时也是完全 NP 类中的所有其他问题。 在上一次活动的末尾我们解释到在 NP 完全问题中“NP”代表“不确定多项式” , 而“完全”涉及到如果可以为 NP 完全问题找到一个多项式时间复杂度算法,就相当于 可以用多项式时间复杂度算法来解决所有的其他问题。 多项式时间算法能够解决的这类 问题的集合叫做 P 问题。所以问题的关键是,是否存在能解决 NP 完全问题的多项式时 间算法,换句话说,就是 P 是否等于 NP?这个问题的答案是还不知道的,这是现在计 算机科学中的奥秘。 关于存在多项式时间复杂度算法的问题—即使这样的算法会很慢—-叫做“可解决 的” 。为什么不叫做“不可解决的” ,因为不管你计算机的速度有多快,不管你同时用多 少台计算机,只要问题的规模增加一点就意味着在实际上是不可解决的。还不知道 NP
  69. 88 完全问题—包括绘图者问题, 旅游镇问题和冰路问题是否是可计算的。 但很多计算机科 学家悲观的坚持在 NP 完全问题中将永远无法找到存在一个多项式时间复杂度算法, 所 以证明了一个问题是 NP

    完全问题就能强有力的证明这个问题本身是不可计算的。 “我无法找到一个有效的算法,我猜是我太沉默寡言了” “我找不到有效的算法,是因为可能的算 法太多了” “我找不到一个有效的算法,但所有这些有名的人也找不到” 图 15.9:当你找不到一个有效的算法的时候你会做些什么:三种可能性 当你的老板让你设计一个有效的算法能最佳的解决一个问题, 而你又找不到你该怎 么办?正如必定发生的, 当航空公司坚持这样的事实: 在网络中加入施泰纳点就能降低 成本。图 15.9 显示 3 你能回应的种方法。如果你能证明不存在最佳解的一个有效的算 法, 那也将很好的。 但是在计算机科学中要证明这样的结论是非常困难的, 因为很难说, 也许在将来某一个聪明的程序员可以写出能解决这个问题的程序。所以,不幸的是,现 在你还不太可能斩钉截铁的说, 没有有效的算法使这个问题可以解决。 但是如果你能证 明这个问题是一个 NP 完全问题,这实际上是成千上万的人在实验室进行研究的问题, 和你一样,也没有找到一个有效的解决方法。这可能不会使你获得奖金,但可以让你摆 脱困境! 补充读物 题为《最短网络问题》的娱乐录像带,由 R.L Graham 在大学视频通信知名人士系 列讲座中介绍最小 Steiner 树和讨论一些他们知道的结果。这次活动的许多材料是在这 个视频中启发的。图 15.9 是由 Garey 和 Johnson 的可理解的经典计算机书而来的。 美国科学的“电脑娱乐性专栏” ,1984 年 6 月,包含一个如何使 Steiner 树使用肥 皂泡沫的简短的描述,随着为解决其他问题,很多有趣的描述其他模拟小玩意,包含意
  70. 91 活动 16 分享秘密——信息隐藏协议 关注焦点 计算平均数 随机数 团队工作 摘要 密码技术使得我们能够同其他人分享信息,同时仍然保持在一个令人惊奇的保密级别。

    这个活动举例说明了一个分享了信息却没有泄露信息的情形: 孩子们将计算出他们的平均年 龄,同时又没有人泄露出他们的年龄。 专有名词 计算机安全,密码,密码技术,平均 所需教材 每组孩子需要一个便笺簿和一只笔 活动流程 这个活动包括得到这组孩子的平均年龄,却又没有泄露他们的年龄。作为选择,人们可 以计算出这个组中孩子们的平均收入(津贴) ,或者一些类似的个体细节。计算孩子们的这 些统计表比成年人要好, 因为年长的人对类似年龄和收入的细节更敏感。 在一个组中至少需 要 3 个孩子。 1. 向孩子们解释你将要计算出他们的平均年龄,但是又不告诉别人他们的年龄是多 少。询问他们对这个问题的做法,或者问他们是否相信能够做到这一点。 2. 选出 6 到 10 个孩子组成一个组。给第一个孩子一个便笺簿和一只笔,并让他们在 第一页纸上秘密的写下一个随机的三位数。就像图 16.1 中,613 就是被选择的随机 数。 3. 让第一个孩子扯掉第一页纸,将他们的年龄加到这个随机数上,将得到的数写到第 二页纸上。在图 16.1 中,第一个孩子的年龄是 8,所以第二张纸上的数是 621。他 们应该保留这个被扯掉的纸(并且不透露给任何人) 。 4. 接着,这个便笺簿被传给第 2 个孩子,这个孩子把自己的年龄加到目前首页的数字 上,扯掉这页纸,并在下页纸上写下总数。在这个例子中,第 2 个孩子的年龄是 10 岁。 5. 继续这个过程——让每个孩子扯掉首页纸,然后将他们的年龄加在这个数字上,然 后记在便笺簿上。直到所有了孩子都有一张便笺纸。 6. 最后将便笺簿传到第一个孩子手中。让这个孩子用此时便笺簿上的数字减去初始的 随机数。在这个例子中,便笺簿共经过 5 个孩子,最后的数字是 657,减去初始数 字 613,最后得到 44。这个数字就是孩子们的年龄和,这样就可以通过用这个数字 适用年级:小学三年级以上 预设能力:能够对 3 个阿拉伯数字进行计算;理解平均的概念并会对其计算 所需时间:5 分钟 适用人数:至少 3 个孩子,多点更好
  71. 92 除以孩子的总数来计算出平均年龄;计算得到的平均年龄是 8.8 岁。 7. 向孩子们指出只要每个人都把他们手中的纸销毁,那么将没有人能计算出个体的年 龄,除非有人合作。 图 16.1 用来得到

    5 个孩子的平均年龄的便笺簿 变换与拓展 这个系统适用于匿名投票——每个人投‘赞成’票则增加 1,投‘反对’票则增加 0。 当然,如果有人增加的数字大于 1(或者小于 0) ,那么投票将不公平。他们将会有引起猜疑 的风险,因为当每个人都投‘赞成’票时,那么赞成票数将超过总人数。 相关知识 计算机存储着我们的大量私人信息:我们的银行余额,我们欠多少税款,我们持有驾照 多长时间,我们的信用历史,考试成绩,医疗报告等等。私有性非常重要。但是我们确实需 要与其他人分享我们的部分信息。例如,当在商店里用银行卡付款时,我们承认商店需要验 证我们是否有可以使用的余额。 常常我们最终提供的信息比实际所需要的要多。 例如, 如果我们在一个商店里进行电子 交易,他们也许能发现我们把钱存在哪里,我们的账号以及我们的名字。甚至,银行可以知 道我们在哪里买东西。大体上,银行通过监控一个人在哪里买煤气和杂物,每天在这些杂物 上花费多少以及什么时候光顾这些杂物店等类似的事情, 就可以了解某人的大概情况。 如果 我们用现金付款,那么这些信息将不会被泄露。很多人不担心这些信息被共享,但是这会存 在被滥用的潜在可能性,比如目标市场(例如,发送一些旅游广告给一些常买机票的人) , 区别对待 (比如给一些人提供更好的服务, 而这些人是那些通常只接待富有群体的银行的客 户) ,甚至勒索(比如通过恐吓揭露一些客户不想被人知道的事情的细节来进行敲诈) 。如果 人们认为别人可能会监控他们的话,那他们有可能会改变购物的方式。 人们普遍意识到秘密有可能被泄漏, 密码协议的存在使得我们在进行电子金融事务处理 时,能够拥有像用现金支付一样的保密性。令人难以置信的是,在不知道钱从哪里来或到哪 里去的前提下, 钱可以从你的银行账户转到商店的银行账户去。 这个行为使得这个事务看起 来有点似是而非:这种情况的实现需要分享部分信息以及一个明智的协议。
  72. 94 活动 17 秘鲁人掷硬币问题——密码协议 关注焦点 布尔逻辑 函数 难题解答(揭谜) 摘要 这个活动介绍如何完成一个简单的,

    但是看起来却不可能的工作——通过掷硬币在两个 只通过电话联系的人之间做出一个公平的随机选择,而且这两个人不一定相信对方。 专有名词 分布式摇硬币,计算机安全,密码,密码协议,与门,或门,组合电路 所需教材 每组孩子需要:一份具有图 17.6 中内容的可复写的纸;大约两打两种颜色的小纽扣或 者筹码。 活动流程 这个活动最初是由其中一个作者(MRF)在秘鲁从事儿童教育的时候设计的,也因此 而得名。你也可以自己根据当地的条件修改这个故事。 Lima(利马,秘鲁首都)和 Cuzco(库斯科,秘鲁南部城市)两只女足队必须决定哪一 队是参加这次锦标赛的主队。最简单的办法就是掷硬币来决定。但是这两个城市离得很远, Alicia 代表 Lima,Benito 代表 Cuzco,而且不能花费时间和金钱到一起去掷硬币。她们能通 过电话来完成吗?可以通过 Alicia 掷硬币, Benito 来猜是正面还是反面。 但是这很难行的通, 因为如果 Benito 猜是正面,而 Alicia 很容易说“不好意思,它是反面” ,这样的话,Benito 将永远不会有赢的机会。当然,Alicia 自然不会天生喜欢欺诈,但是这次毕竟是非常重要的 竞赛,而且诱惑非常大。而且,即使 Alicia 是诚实的,那么当 Benito 输的时候,她会相信 Alicia 吗? 她们决定这样做。先一起设计出一个由与门和或门组成的电路,下面将解释这个电路。 原则上,她们可以通过电话来完成这个电路,虽然这个过程确实是比较沉闷(但是,可以借 助于传真机) 。在构造电路的过程中,每个人都想尽量确保电路足够复杂以保证另一个人无 法作弊。最终的电路双方都知道。 与门和或门的规则比较简单。每个“门”有两个输入和一个输出(图 17.1) 。每个输入 既可以是0也可以是1——可以分别解释成假和真。 与门的输出当且仅当两个输入都是1 (真) 的时候才是 1(真) ,否则为 0(假) 。例如,在图 17.1 中的与门的输入为一个 1、一个 0, 因此输出(在底部的长方形中)是 0。或门当且仅当其中一个输入(或两个都)为 1(真) 适用年级:小学高年级以上 预设能力:会计算,理解奇数与偶数。对‘与’和‘或’有一定的了解更好。如果孩子们 已经了解二进制数表示法(参见活动 1) 、奇偶的概念(参见活动 4)和活动 14 中的单向函 数,那么将在这个活动中收获更多。 所需时间:大约 30 分钟 适用人数:班级中的所有个体
  73. 95 的时候输出为 1(真) 。这样,在图 17.1 中这个或门在输入为 0 和 1 的时候输出为

    1。 图 17.1 一个与门和一个或门 图 17.2 ‘或门’和‘与门’的组合 一个门电路的输出可以连接到另外一个的(或几个其他的)门电路的输入,从而产生一 个更复杂效果。例如,在图 17.2 中的左边一个电路中,两个或门的输出连接到第三个或门 的输入,达到的效果是如果四个输入中的任意一个为 1,那么结果将为 1。在图 17.2 中的左 边一个电路中, 上面的两个与门中的每一个输出都连到下面的两个门电路中, 因此整个电路 有两个输出值。 对于这个秘鲁掷硬币问题,我们需要更复杂的电路。在可复写的纸张上的图 17.6 中的 电路有 6 个输入和 6 个输出。图 17.3 给出一个针对具体的输入集合的设计好的例子。 通过电话用这个电路来进行掷硬币的方式如下。 Alicia给这个电路选择一个随机的输入, 包括 6 个二进制数(0 或者 1) ,并且所选择的数字对外保密。她把这 6 个数字当作这个电路 的输入,并且把得到的输出发给 Benito。一旦 Benito 知道了输出,她必须猜 Alicia 的输入的 奇偶性。如果电路足够复杂的话,那么 Benito 将不能计算出答案,则她的猜测将只能是一 个随机的选择(事实上,他甚至是通过掷硬币来选择! ) ,Benito 赢的话——最后的决赛在 Cuzco——如果他猜对了;Alicia 赢——最后的决赛在 Lima——如果他猜错了。一旦 Benito 告诉 Alicia 他的猜测,Alicia 给出她的秘密输入值,以便 Benito 确定这个输入确实能产生那 个输出。
  74. 96 图 17.3 Alicia 给出的一个例子 1. 将孩子们分成几个小组,给每个小组电路和一些筹码,并且向他们讲解这个故 事。如果孩子们想象他们的一个队长正在和对手学校掷硬币,那么情形将更有 趣。对筹码的颜色做一个规定——红色代表 0,蓝色代表

    1,诸如此类——让孩 子们在纸张的图例上面记下这个规定以帮助他们记忆。 2. 给孩子们演示怎样把筹码放在电路的输入中以表示 Alicia 所选择的数字。然后 解释与门和或门的规则,将其总结在这张纸的底部(考虑让孩子们自己标记) 。 3. 在节点中放置筹码,演示怎样使用这个电路来得到相应的输出。这个过程必须 保证精确和细心;表 17.1(不要把这个表给孩子们)显示了对每个可能的输入 得到的对应的输出,在万一遇到问题时可以用于参考。 4. 现在每个组应该推选出 Alicia 和 Benito。每个组可以分成两半,并且各自选出 Alicia 和 Benito。Alicia 应该选出一个针对这个电路的随机输入,计算出输出, 然后告诉 Benito 输出结果。Benito 猜测输入的奇偶性(这个数中 1 的个数是奇 数个还是偶数个) 。显然在这个过程中 Benito 的猜测是随机的。紧接着,Alicia 告诉每个人输入的数字是什么,如果 Benito 猜中了这个数字的奇偶性就赢了。 Benito 可以通过检查这个数字通过电路是否可以得到正确的输出,以此来判断 Alicia 没有改变她的输入数字。 这时,这个掷硬币的过程就结束了。 如果对于一个具体的输出,Benito 可以找到与之对应的输入,那么他作弊。这样,Alicia 的必要工作就是确保这个电路的功能是单向的(one-way) ,正如在活动 14 中讨论的那样, 为了防止 Benito 作弊。单向函数是一种根据输入可以比较容易计算出输出,但是根据给出
  75. 97 的输出非常难计算出对应的输入的函数。 如果 Alicia 能够找到具有相反奇偶性的两个输入通过电路可以得到同一个输出, 那么她 可以作弊。这时,不管 Benito 怎么猜,Alicia 都可以给出一个输入来说明

    Benito 是错的。这 时,Benito 的必要工作就是确保这个电路中的一个输出不能映射很多不同的输入。 表 17.1 图 17.3 中电路的输入—输出函数 5. 看孩子们是否可以找到一种能够让 Alicia 或者 Benito 作弊的方法。 从表 17.1 中 的第一行可以看到,几个不同的输入得到了输出 010010——例如,000001、 000011、000101 等。这样,如果 Alicia 声明输出为 010010,她就可以在 Benito 猜输入为偶数的时候给出自己的输入为 000001,反之则给出 000011。 使用这个电路,Benito 很难作弊。但是如果输出正好是 011000,那么输入肯定 是 100010——没有其它的可能性(你可以通过表 17.1 核对正确性) 。这样,如 果这个恰巧是 Alicia 给出的输出数字,而 Benito 猜测输入为偶数,那么就肯定 是正确的。一个基于计算机的系统将使用更多的位(bits) ,因此将有非常多的 选择性(每多出一个位,可能的情况将增加一倍) 。 6. 现在让每组孩子设计他们自己针对这个游戏的电路。看他们是否可以设计一个 电路能够让 Alicia 很容易作弊, 在设计另一个能够让 Benito 很容易作弊的电路。 电路也不是必须有 6 个输入,而且电路的输入、输出个数也可以不同。
  76. 98 变换与拓展 1. 在实际应用中一个明显的问题就是需要构造一个 Alicia 和 Benito 都能接受的电 路。这可能使得这个活动对孩子们来说更有趣味性,但是可能使得在实际中很 难完成这个过程——特别是通过电话来完成时!但是,有一个简单的办法来完

    成这个事, 让 Alicia 和 Benito 分别构造他们各自的电路并且公开。 然后, Alicia 将她的保密的输入分别通过这两个电路,再通过比较相应的位(bits)将这两 个输出结合,最终得到最后的输出,如果这两个输出是等价的那么结果为 1, 否则为 0。在这种情况下,如果一个参与者不作弊的话,另外的参与者也都不 能作弊,因为如果这两个电路中的其中一个是单向函数的话,那么它们的结合 体仍然是一个单向函数。 下面的两个变换问题本质上与密码协议和掷硬币问题关系不大, 但是也用到了由与门和 或门构成的电路的思想。它们在原理上探究了一些重要的概念,不是只针对计算机电路,而 是逻辑本身。这种逻辑称作布尔代数,以数学家 George Boole(1815-1864)的名字命名。 2. 孩子们也许已经注意到对于全 0 的输入——000000,输出被限制为全 0;同样 的对于全 1 的输入——111111,输出被限制为全 1(也许还有其他的输入可以 得到这种输出;确实,例如,对于这个电路例子,输入 000010 也得到全 0 的 输出,而输入 110111 得到全 1 的输出) 。这是因为电路是由与门和或门组成而 得到的因果关系。通过增加一个非门(图 17.4)——只需要一个输入,而得到 相反的输出(例如,0Æ1 和 1Æ0) ,孩子们可以构造不包含这个属性的电路。 图 17.4 非门 3. 另外两种重要的门类型是与非门(and-not)和或非门(or-not) ,类似与门和或 门但是跟着一个非门。这样, “a‘与非’b”等价于“a 与 b 的非” 。这些不允 许完成任何功能不同的电路,因为总可以通过相应的与门或者或门并结合非门 来完成同样的效果。但是,有一个有趣的特性就是所有的其他的门类型都可以 通过与非门或者或非门来完成。 已经介绍了与门和或门, 让孩子们考虑是否可以通过将这两个门电路互相 连接来实现其它的门电路, 更近一步, 是否可以只通过连接一种门电路来实现 其它的门电路。图 17.5 的上排给出了怎样只通过与非门构造出三种基本的门 电路——与、或和非门,下排给出了怎样用或非门来实现这三种门电路。
  77. 99 相关知识 近年来,通过计算机网络对商业行为进行管理呈现急速增长,在这个过程中,保证电子 货币交易、交易的秘密性、数字签名、合法绑定以及档案的安全性是非常重要的。密码学主 要是有关通信的安全性和私有性。 二十年前, 计算机科学的研究者发现一个与直觉相反的结 果——秘密可以通过那些确保某些信息公开的技术来保证。 这个结果就是所谓的 “公共密钥

    加密” (活动 18,Kid Krypto) ,现在它被认为是交换信息的唯一完全的安全方法。 图 17.5 用‘与非门’和‘或非门’构造三种基本门类型。(a)和(d)是‘非门’ ,(b)和(e)是‘与 门’ ,(c)和(f)是‘或门’ 。 密码不仅用于对事情进行保密, 还可用于对限制某些人可以得到的信息进行控制, 以及 用于在地理上分离的人之间建立信任关系。密码事务的形式规则或者“协议”已经设计出来 用于将表面上不可能的事情变成现实, 比如数字签名以及告诉别人你拥有一个秘密 (比如一 个密码)且没有实际地告诉别人这个秘密到底是什么。通过电话掷硬币就是一种简单的、但
  78. 100 是与此类似的问题,这种问题就是那种看起来不可能,但是实际上却可以做到的事情。 在实际中,Alicia 和 Benito 将不会自己去设计一个电路,而是需要一个计算机程序来实 现这个内部的转换。 可能他们中的任何一个人都不会对软件到底是怎么实现的感兴趣。 但是 他们却都将不遗余力的确保对方不能影响最终的输出结果,不管他们的计算机水平有多好,

    也不管他们多么努力地去尝试。 原则上, 任何争论都可以通过上诉到一个中立的裁判来解决。 在这个过程中用到的电路, Alicia 的原始的二进制数字和她发给 Benito 的原始输出以及 Benito 反馈回的一个猜测都将告 诉这个裁判。一旦交换信息的过程完成,所有的信息将被公开,因此所有的参加者将不得不 承认这个输出是基于这个公开的信息的。裁判将把 Alicia 的原始输入数字输入到电路中,并 判断其声明的输出,并以此判断决策是否公平。毫无疑问,实际上将有一个清楚的步骤来保 证通过这个规则得到的结果不可能产生争论。与 Alicia 掷硬币并且 Benito 猜奇偶性这种情 况相比,这种案子将没有哪个裁判愿意承担。 像图例的这种那么小的电路在实际中的用处不大,因为很容易得到表 17.1 并以此来作 弊。使用 32 个二进制数字作为输入将提供更好的保护。但是,即使这样也不能保证不能作 弊——这取决于具体的电路。 可以采用一些其他的方法, 比如在活动 14 中提到的单向函数, Tourist Town。实际中采用的方法常常取决于大数的因式分解这个已知的难题(但是,正如 我们将在下一个活动中提到的那样, 这不是一个 NP-complete) 。 很容易判断一个数是另一个 数的因数,但是要找到一个大数的所有的因数是一个非常费时的问题。这就使得 Alicia 和 Benito(以及裁判)很难通过手工的方式来解决这个问题,但是正如上面所提到的,实际中 这个问题常常通过采用一个已有的软件来处理。 数字签名也是基于一个相似的想法。 通过公开 Alicia 所选择的秘密输入在这个电路中产 生的对应输出,她可以有效的证明自己就是得到这个输出的人,通过一个合适的单向函数, 其他人都不会得到一个具有这种输出结果的输入。没有人可以扮作 Alicia。为了制作一个实 际的数字签名,需要一个更复杂的协议来确保 Alicia 可以签出一个特殊的信息,也为了保证 别人可以确认 Alicia 就是这个签名者,即使她声明不是。但是原理是一样的。 另一个应用就是通过电话来玩纸牌, 在这个情况中, 没有裁判来发牌以及记录选手的情 况。任何事情都必须通过选手自己来执行,如果在游戏中发生了争论的话,那么将求助于裁 判来解决。谈判代表在正规的签合同时也会发生类似的情形。显然,玩家在游戏的过程中需 要保密他们的牌。但是,他们必须是诚实的——他们绝不允许声称自己有幺点(ace) ,除非 他们确实有。 这一点可以在游戏结束的时候进行核对, 允许每个玩家检查其他人的牌和出牌 的顺序。 另一个问题是在玩游戏期间怎样在保证每个玩家的牌是保密的情况下分发牌。 令人 惊奇的是, 可以通过使用一个密码协议来做到这一点, 这个协议与在掷硬币问题中用到的那 个不同。 密码协议在电子交易中非常重要, 不管是一张小电子卡的持有者的身份鉴别, 还是使用 电话的批准, 还是对电子邮件信息的发送者的确认。 在做这些类似事情时的可靠性对于商业 电子化的成功与否是至关重要的。 补充读物 Harel 的书《Algorithmices》讨论了数字签名和一些相关的密码协议。该书也提到了如 何通过电话打扑克,而通过电话打扑克的想法最先 1981 年由 D.A.Klarner 编辑的书《The Mathematical Gardener》 中的 “Mental poker” 一章提出的。 Dorothy Denning 的 《Cryptography and data security》 一书是有关密码学的优秀的计算机科学课本。 Dewdney 的 《Turing Omnibus》 一书中在有关布尔逻辑的一章中讨论了在这个活动中可用于电路的一些内容。
  79. 102 活动 18 公钥加密 关注焦点 公钥 私钥 加密 团队工作 摘要

    这个活动是所有活动中技术含量最高的活动。 做这个活动要求学生们认真、 专心、 细心。 密码学对信息安全来说非常重要,而现代密码学的关键是使用公钥信息:一个消 息发送者通过公钥对信息进行加密,而信息接收者通过自己的私钥对其解密。 这就好像我们每个人拥有一把自己的锁,在锁上写上我们自己的名字,然后 再把锁打开并放到一个公用的桌子上让别人使用。当然,只有锁的主人才有锁的 钥匙。如果 Amy 想给 Bill 发送一条加密消息,那么 Amy 会把消息放入一个箱子 里,然后用 Bill 的锁把箱子锁上,再把箱子送给 Bill。这样即使箱子错误地发 送到了其他人的手足,他们也无法打开它。采用这个方案我们就不需要对通信信 息编写安全密码。 这个活动演示了孩子们如何使用数字进行加密。 专有名词 密码学,加密,解密,NP 完全问题 所需教材 z 所需材料:图 18.1 和图 18.2 的复制品,同时还需要一架投影仪。 z 人员安排:做这个活动需要把孩子们分成四个组,然后再把每个组分成两个子小组。每 个子小组分发一份复制品。 活动流程 Amy 打算给 Bill 发送一条秘密消息,通常我们认为这条消息应该是一些句子或几段话, 但是在这个练习中,Amy 给 Bill 发送的只是一个字符---实际上只是一个数字,他用数字代 替字符。 也许有人会认为这条消息太简单了, 但是如果能成功地发送一个字符的秘密消息到 目的地的话,就能够发送字符串,如“How are you” ,甚至是句子,再甚至是段落到目的地 了。 我们将会看到利用 Bill 的公钥如何使 Amy 的数字成为密文,这个密文即使被坏人中途 截住,他们也无法解密。而这个密文只有 Bill 能够解密,因为只有他有锁的私钥。 适用年级:初中以上 预设能力:理解加密的概念并会实现一些简单的加密操作; 所需时间:30 分钟 适用人数:至少 2 个孩子,整个班级一起效果更好。
  80. 103 图 18.1 Bill 的私有图 图 18.2 Bill 的公有图 我们利用图来加密消息。图中的线相当于街道,而点相当于街道的拐角。每个图都有一

    个公开版本---即我们所说的锁,和一个私有版本---即开启锁的钥匙。 上面图 18.2 显示的是 Bill 的公有图。这个图不是一个秘密:Bill 可以把它摆放到公 众能够看到的任何他方,或者放到因特网上,或者提供给任何想和 Bill 通信的人们。在这 里,Amy 就有一份 Bill 的公有图。图 18.1 显示的是 Bill 的私有图。这张图与他的公有图 相似,唯一所不同的是图中有几个点被放大了,而这张图由 Bill 私人保管。 这个活动最好由整个班级共同来完成,因为它的工作量很大。活动虽然不是很难,但是 需要学生们精确地做,因为错误会带来许多麻烦。做这个活动重要的一点就是,当孩子们完 成活动后会感到非常的惊讶, 因为起初他们都认为这个活动是不可能成功的。 这个活动同时 也给了他们克服困难的经历。还有一点有用的就是,当孩子们学会这种加密方法后,他们可 以对自己的日记或其他私人信息进行加密, 这样即使其他同学得到这些信息, 甚至知道这些 信息是如何加密的,他们也解不了密。 具体操作: 1. 将 Bill 的公有图在投影仪上放映,而 Amy 将会决定哪个数字被发送给 Bill。现在 Amy 在公有图的每个拐角(点)放置一个随机数,因此这些随机数的和就是 Amy 将要发送 的数字。图 18.3 给了一个这样的例子。在这个例子中,Amy 要发送数字 66 给 Bill。因 此在点上面的(即括号上面的)数字之和为 66。如果需要,我们还可以引入负数来实现 其它数值的加密。 图 18.3 Amy 利用 Bill 的公有图而放置随机数的例子 2. 现在 Amy 必须计算给 Bill 发送什么。 如果她把带有最初数据的图发给 Bill, 这样做不好, 因为如果这张图发错对象,发到其他人手中,他们就会得到消息。因此,我们采取如下 方法:选中任意一个点,然后再找出它的所有的(这一张图中每个点都有三个)不同的 邻居---四个点上的数字相加,再把总和放到选中的这个点上面。我们用这个方法把所有 点上面的数字重新做个调整。如图 18.3,我们选中右下角的点,其最初的数字为 6,而 它的三个邻居(即与此点直接相连的三个点)的数字分别是 1,4,11,那么这四个最初的
  81. 104 数字之和为 6+1+4+11=22,所以我们就把 22 写在右下角的点的下面。当我们把所有的点 重新计算完之后,我们可以擦掉最初的数字,只留下最新计算所得的数字,或者干脆再 画一张图,每个点标上新的数字,如图 18.4 所示。 3.当新的图(图

    18.4)做好后,Amy 就把这张图发给 Bill,注意,这张图上面每个点上只 标注了最新计算而得到的数据。 4. 只有 Bill 的私钥能够解密这个消息并且找出消息里面的数字。 这就要用到 Bill 的私有图。 方法如下:Bill 先察看自己私有图上面的那些放大的点的位置,然后再在 Amy 发送给他 的图中找出这些点,把这些点上面标记的数字(分别是 13,13,22,18)相加,即 13+13+22+18=66 ,这样便得到了 Amy 想要发送给他的数字了。 5. 哇!太不可思忆了,怎么会这样?这是因为 Bill 的私有图是一张特殊的图。如果 Bill 选 中他的私有图中的任意一个放大的点,再把它周围的三个邻居点也加进来,那么他的这 张私有图可以被划分成几个互不重叠的区域,如图 18.5 所示。仔细察看这四个互不重叠 的区域,我们将会发现这几个区域已经完全覆盖了整副图中的每一个点,并且只覆盖一 次。因为这些点上面的最初的数字之和为 66,现在我们用四个特殊的点来代表每个区域 上点之和,那么这四个特殊的点上面的数字之和也就等于所有点之和,即 66。 图 18.4 图 18.5 Bill 私有图及所划分出的不重叠的区域 6.现在我们可以将学生分成四组,每一组又分成两个小组。在这两个小组里面,我们给第 一小组公有图,并让他们加密他们发送的数字,但是我们先不给第二小组成员私有图,先让 他们自己计算一下, 看看他们能否计算出那个要发送给他们的数据, 其实如果没有私有图或 者推算不出私有图的话,他们无论如何是计算不出来的。然后再给他们私有图,看他们是否 能够正确地解开加密的数字。
  82. 105 相关知识: 当我们通过计算机网络发送密文时,我们总是不愿意其他人(接收者除外)能够破解此 密文。然而如果密文的发送者和接收者拥有同一个密钥的话,这个破解工作会容易些。但是 本活动使用的并非是同一个密钥,而是采取了公钥加密技术。即发送者 Amy 采用一个随处 可得的公共密钥对发送信息进行加密, 而只有接收者 Bill

    才能通过自己的私钥对密文进行解 密。 加密技术是密码学的一个方面,另一个就是认证:当 Amy 收到一个来自 Bill 的回信, 那么 Amy 如果辨别这个消息真的就是来自 Bill,而不是其他人的恶作剧?假如 Amy 收到一 封电子邮件说: “亲爱的, 我被困在这个破地方啦, 身上钱也花光了, 请速往我帐号里汇 1000 美元,帐号是 0241-45-784329。爱你的 Bill.” ,那么 Amy 如何辨别这个消息是否真的是 Bill 发出的?此时,就可以使用公钥加密技术来进行判断。Amy 可以这样:她可以用 Bill 的公 钥对她将发送的消息进行编码加密, 发送给 Bill,然后 Bill 用只有自己才拥有的私钥对此消息 进行再加密,并与私钥一起发送给 Amy。如果 Amy 能用 Bill 的公钥对此消息解密,那么可 以证明此消息必来自于 Bill。 补充读物 Harel 的 《公钥密码学的算法研究》 ; 书中讲述了如何使用大素数来建立一个安全的公钥系统。 由 Dorothy Denning 著的《密码学与数据安全》一书,还有 Bruce Schneier 著的《应用密码 学》一书,讲述了更多的可操作的例子。 继续练习: 通过相似的操作,我们可以对下面的公有图进行加密,然后再用其相应的私有图解密。 试试吧。 图 18.6 公有图 图 18.7 与图 18.6 相应的私有图
  83. 106 活动 19 巧克力工厂----人性化界面设计 适合年龄:小学三年级以上 预设能力:没有特定的能力要求 所需时间:一小时或更长时间 适用人数:小群体到整个课堂均可 关注焦点 设计

    推理 认识日常物品 摘要 这项活动的目的主要是为了提高人们人机接口设计事宜的意识。因为我们生活在一个设 计不良盛行的世界里,我们已经习惯于处理问题,这些问题是由于我们与先辈互动不足、埋 怨自己造成的,而我们不会把问题归咎于设计的瑕疵。计算机大大地提升了问题,因为它们 没有明确的目的----事实上, 它们完全是一般性的用途----它们的出现没有为人们如何运 作给出任何线索。 专有名词 界面设计,赋予,测绘,转换效果,人口刻板印象,图标,用户界面评价 所需教材 每组小孩需要: 图 19.4 和图 19.5、图 19.6 的复印件 一份在包含在图 19.7 的卡片,或是更多。将个人卡片削成片,然后分发给组成员 活动流程 大型巧克力工厂由一种电子定位器控制—像被称为工厂中的小机器人。这些小机器人有 着惊人的回忆,而没有任何书面语言。正因为如此,他们对记住要怎样做才能运行巧克力工 厂有着困难,并且事情经常出错。也正因为如此,人们应该把新工厂设计为成对小机器人容 易管理。 1.把孩子们分成小组,并跟他们解释这些故事。 2.这些小机器人面对的第一个问题是穿过正在进行蒸馏巧克力的门。他们已经不记得是 推还是拉,或是滑动门使其向一边倾斜来打开门。因此,他们将最终撞到对方,并把巧克力 洒落到任何地方。孩子们应该在图 19.4 写上“门”这样的字样。在所有案例里,不止一个 方框是合适的。一些门窗,如何打开,并没有写得很清楚,在这种情况下,孩子们就应该记 录第一次尝试的是什么。 一旦他们填写了自己的单子, 那么整个小组就应该去讨论每种门的 相对优点,尤其是在你背着一桶热巧克力的情况下,去讨论如何简单开门,如何使用门是合 适的。这样他们就能决定什么样的门在厂中使用了。 跟着这项活动,我们用一个课时的时间来讨论。表 19.1 简短地点评了表中的每一道门。 现在,实际生活中的大门是向人们提供门的结构和铰链位置,以便告诉人们如何去打开,至 于向内还是向外开启,这是有约定习俗的。找出这样一种门:把手用在里面,并讨论其合适 性。门是向里开还是向外开至走廊呢?----为什么?(答案是:尽管在有些紧急情况下,人 们向外作简单疏散时,也是打开门进入房间的,所以,如果你走出来,你是不会把门推向走 廊上正在走的人的。)
  84. 107 平原门:根本不能看清楚如何打开门, 除非门 没有把手,它需要推而不是拉。 铰链门:至少你可以看到门是从那一边打开 的。 手把门:像这样的把手通常都是用来拉或者 滑动的。 面板门:很明显,只能推。除此之外,你还能 做其它的吗?

    滑动门:这门只能滑动。 有标签的门:标签就像一个小小的用户手册, 但是一双门是否真的需要用户 手册呢?机器人是不会读的。 酒吧大门:很明显,你希望推开酒吧门,但是 你推向哪一边呢? 旋钮门: 旋钮显示如何去控制门,而不是要 么推要么拉,因为它很可能是不能 滑动的。 玻璃门: 小型立式酒吧在门的一边写上“推” , 在门的另一边上写上“拉” 。 表 19.1 工作表中有关门的信息 这里的关键概念是被叫做赋予对象, 这是它明显的特征----基本原理和感知----它展示 如何应使用对象。赋予是一种类可以允许或“提供”的动作。例如,桌子是为了坐,椅子是 为了放东西,旋钮是为了旋转,插槽是为了插入东西,按钮是为了推,它们所有的出现都是 很明确的。 那么计算机的出现又是为了……什么呢?除了非常低的层次外, 如输入 (如键盘) 和输出(如屏幕)功能,计算机并没有赋予很明显的功能。 门是种非常简单的物体。复杂的东西可能需要解释,但简单的东西就不需要了。简单的 物体如果需要图片、标签或说明,然后再设计的话,这已然宣告失败。 3.壶中含有不同种类的巧克力, 这就需要在不同的温度下煮熟。 在图 19.5 的是旧巧克力 工厂的火炉。左侧旋钮控制左后方的加热元件,接下来的旋钮控制左前轮的元件,右侧旋钮 控制着右后方的元件, 像这样旋钮控制前面的元件的做法是正确的。 那些机器人总是会犯错 误,它们在错误的温度下烹制巧克力,当它们到达元件时,为了调整控制,它们竟然烧毁了 自己的袖子。 孩子们都记得在家喝醉了后应该如何控制自己, 这样他们就能为新工厂想出一 个更好的设计方案了。 接下来用一个课时的时间来讨论这次活动。图 19.1 显示了一些常见的设计方案。为了 避免穿过元件,左下方的门已经控制了前面的门。在剩余的顶层设计里,从控制到焚烧这个 过程有如此之多的映射关系,以致得用 8 个词的标签来表示,这些做法都是非常必要的。在 顶部中心,"配对"安排只有四种可能映射(左边两个,右边两个),这样做会更好些。这就 要求有 4 个标签的单词。 右上角的设计表明控制与焚烧之间的关系图, 当然不是用语言来表 示的。在下方的 3 个设计不需要标签。左侧的设计已经控制了每个焚烧过程,这样做是笨拙 而危险的。其它两个设计出于以下不同原因需要略微重新部署烧制:在中心的设计,为了便 于控制,就预留了空间;而在右手边的设计,为了使得相互通信明朗,所以它们都得重新安 排设计。 这里的关键概念是在显示中对其结果控制映射。 利用物理类比和文化标准的优点, 自然 映射对自身理解比较深刻。图 19.1 底部,在空间中相互通信就是个很好的例子----人们学 习它很简单,而且也很容易记住。在顶端的任意映射,需要加以标签、解释并背诵。
  85. 108 图 19.1:一些可能的炊具布局 4. 在不同的完成阶段,该工厂到处是输送带,上面放着半成品的巧克力。机器人们在中 央控制室中手动控制着这些输送带。在控制室里,人们需要告诉机器人停止传送带,减速, 或重新启动。 在旧工厂,工程师做了一个语音系统:人们通过控制室里的扬声器发出声音,再通过传 送带控制声音。但是由于工厂太吵,所以其他人很难听见。该团体需要利用视觉信号制定一 新方案。

    其中的一种可能性就是把灯光作为信号阻止,减速后再开始。这应该遵循交通灯公约, 即:把红色作为阻止信号,把黄色作为减速信号,把绿色作为开始信号。它们也都应该被做 得跟交通灯一样,红在顶部,绿色处于底部。 但是现在发现, 在机器人管辖的地域, 灯光信号与交通灯为我们的工作方式是不一样的: 黄色代表停止,红色代表开始,灯光变绿就是警告人们即将有个刹车灯。这对我们又会造成 什么影响呢?(答案:工厂应遵循机器人的灯光信号规则----我们不应该去强加我们自己 的东西。) 这里的关键概念是信号的转换影响----人们将他们以前所学习的知识和对对象的展望 转移到类似的新情况下----和不同群体的人学习这些这些信号行为, 并期望它们能以某种特 定的方式运作。虽然交通灯的情况似乎有些过于牵强(在机器人管辖的地域里面,没有什么 是可牵强的)。但是在我们的现实世界中有很多的例子:在美国,当飞机起飞时,交通灯是 亮着的,当飞机降落时,交通灯是熄灭的;而这在英国却恰恰相反;计算机键盘与按键式电 话的设定方式也不尽相同;在世界各地,号码格式(小数点或逗号)及日期格式(日/月/ 年或月/日/年)都是不一样的。 5. 当机器人在巧克力工厂完成一次转移工作,它们必须清理和移去锅子、水壶、汤匙 和搅拌器等物品,随时准备下一次转移工作。有个带架子的橱柜可供它们放物品,但是在下
  86. 109 一次转换时,有些东西被放在何处,对它们来说总存在着困难。机器人并不擅长去记东西, 像去记“把壶放在中间架子上”、“把壶放在架子左边”这样的规则,它们都是困难的。 这组小孩应该去想出一个解决问题的更好方案。 图 19.2 是个好的设计方案。这里的关键概念是使用一些很明显的限制规则,使之在在 其它地方一样也是显而易见的。从孔的形状和大小来看,这是很显然的:设计者对孔的形状 和大小做出了规格限制,通过物理性能研究物体,避免依靠使用任意规则。 6.

    在巧克力工厂的主控制室里,有许多按钮、杠杆和操作其它机器的交换机。这些都 需要做标签, 因为那些机器人是不会阅读的, 而且标签上不能是语言, 都必须是标志性图案。 图 19.2:利用了限制规则设计的橱柜 像图 19.6 显示的例子那样,给孩子们一些搜索图标。儿童应会确定那些图标可能代表 着什么(比如说:信件进入信箱,这就可能代表了正在发送信息)。这次练习是没有"正确" 的答案的。每个人的想法完全就是为了确定那些图标每种的可能含义。 7. 现在让我们为巧克力工厂设计图标。 图 19.7 的卡片上指明了一些相关函数串。 每组 小孩得到一张或几张卡片, 而其他组小孩并不知道知道他们卡片上写的是什么。 人们把控制 面板设计成一些函数串, 这些函数串里的个别图片包含了 5 个或 6 个操作。 然后这组小孩在 没有告知其它小孩他们是如何操作的情况下, 去向其它组小孩展示他们的工作, 来看看其它 组小孩是否能猜得出他们的图标含义。这里可以使用些具有想像空间的、有色彩的、简单而 明了的图标来鼓励其它小孩。
  87. 110 图 19.3 :早期录像机的说明图 变换与拓展 孩子们能对他们的电子表设定时间吗?该映射包含的厨具布置得都很简单, 因为有 4 个 控制器控制着

    4 个燃烧器。当运行次数超过了控制次数,更多麻烦便出现了。但控制手表往 往是极其复杂的。 ( “你需要一位麻省理工学院工程学士学位的人来做这” ,有人一看到他的 新手表就告诉用户界面设计专家 Don Norman,Don Norman 有工程学学位,如果给他几个小 时,他就可以计算出手表的时间设定。但是为什么需要花数小时呢?) 录像机对大多数用户尤其是成年人形成了个更有意义的问题 (最终其主要的消费者是什 么) 。 试着让一个班的人去讨论孩子们是如何控制录像机的。但是这些必须预防:尽管从人 性化界面的角度来看,它们设计得有可能是非常糟糕的,可孩子们可能已习惯使用它们,并
  88. 111 觉得它们的设计看上去不是很困难(他们说,如果你看到录像机,其时钟在 12:00 是不闪动 的,那么肯定有迹象表明,该家庭包含了青少年)。图 19.3 显示了早期录像机的指令集和示 意图;从图上的详细指示,可以按顺序录制电视节目。作为类的练习,重新设计控制,许多 小孩都做不到这点。 相关知识

    人机交互可以让人们富有成效和安全地执行他们的活动, 是关于设计、 评价和实施的计 算机系统。在以前,计算机被用来教育和训练高学历的计算机专家和用户。但现在,计算机 已经成为我们所有人都必须使用的日常工具, 到目前为止, 计算机需要更注意人机交互界面。 一些涉及到人生命的许多灾难之所以会发生,正是因为缺乏足够的接口,如:坠机事 件甚至民用飞机的坠毁;因开关遥控操作错误导致高速公路桩起伏;核电站的灾害等。在小 规模的范围里,许多人在工作场合使用计算机和其它高科技都遭受到挫折----甚至是相当 大的挫折(如一个警察曾经把一枚子弹打到他的计算机屏幕里面去了)。不仅仅是计算机如 此,其它的也类似:如果你有锐利的爪子或钩嘴,那些收缩膜包装只能被你打开,因为你总 是尝试着用自己的方法去打开它们,但当你打开它们时,牛奶总会溅你一身;在电梯旁你看 不到如何去推动按钮;家庭影院系统,其广告声称一切皆有可能,那么它们不可以做的事情 又是什么呢? 我们日益习惯于“人为错误”并思考自己的不足之处;当事情出错时,人们常常责怪自 己。但是很多所谓的人为错误,其实是设计的错误。人们加工信息有其局限性,设计师需要 考虑这些。设计不好就不能通过以下途径来纠正:出示一份详细而复杂的用户手册;期待着 人们一起去研究并永远记住它。 此外, 人类都会犯错误的, 设计时需要将这个问题考虑进去。 接口评价在设计过程中是一个重要的组成部分。 当孩子们测试自己的图标设计时, 目前 的活动已涉及到了一些评价。在精心控制的心理学式的实验中,在机器人(它们身上可能会 有不同的图标)身上将会有更为深入的评价。 尽管许多问题都是由于对接技术----尤其是对于录像机----引起的, 但是人机界面的 设计绝不是什么笑话。接口不当可能会导致个人工作的不愉快,股票市场灾难,丧失自尊和 生命的问题。 补充读物 Don Norman 的书《设计每天的事情》,其基调是愉快和开放的,主要针对许多人在日 常产品上的设计问题。Jenny Preece 的百科辞典《人机交互》是计算机学科领域里面非常 全面的书。当我们准备这次活动时,我们大量地借鉴了上述两大来源。
  89. 115 活动 20 计算机对话—图灵测试 关注焦点 协商 推理 摘要 该活动的目的在于引起对计算机是否能显示出 “智能”

    或者是否可能在将来实现 “智能” 这个问题的讨论。本文基于一个计算机科学的先驱者对一个人是如何认识人工智能的研究, 假设人工智能已经出现,传达一些目前可行的信息,并且很容易与精心挑选的“智能”这一 表述混淆。 专有名词 人工智能;图灵测试;自然语言分析;自动机编程;故事生成 所需教材 每个被测试的学生需要阅读表 20.9 的问题(每个问题,或是在高射投影仪幻灯片上的副 本)和表 20.10 的答案;每个学生备好铅笔和纸。 活动流程 该活动以游戏的方式进行, 游戏中孩子通过提问题和分析答案, 辨别对方是人类还是计 算机。游戏的过程如下。 有四个参与者:我们称他们为Gina,George,Herb和Connie(姓名的首个字母可以帮助 你记住他们的角色)。游戏由教师协调进行。班上其余的学生是观众。Gina和George是中 间人,Herb和Connie将回答问题。Herb将给出人类的答案,而Connie将假装是一台计算 机。观众的任务就是找出这两个角色中哪一个是人,哪一个是假装成计算机的。Gina和 George确保游戏公平的进行:他们传递问题给Herb和Connie,但不让观众知道哪个问题给 哪个人。Herb和Connie在不同的房间,他们和观众也在不同房间。 游戏内容如下。Gina从观众中取一个问题给Herb,George也取相同的问题给Connie(但 观众不知道Gina和George会把拿到的问题给谁)。Gina和George报告答案。需要中间人的原 因是确保观众无法看到Herb和Connie是怎样回答问题的。 在班级开始活动之前,选择学生扮演这些角色,并简要告诉他们应该做什么。Gina和 George必须从观众中取问题并分别传给Herb和Connie, 并把他们的答案报告给观众。 重要的 是他们不能指明是谁回答的问题,例如,通过报告“她说答案是……”,Herb必须给出他所 要回答的问题的简短,精要,和诚实的答案。Connie通过查看表20.10的活动单来回答这些 问题。斜体部分为游戏的说明,Connie将根据说明计算出答案。 由于有些答案难以记住,Gina 和 George 应备用铅笔和纸。 1.游戏开始前,得到学生们的看法,这些看法是关于计算机是否是智能的,或他们是否 适用年级:小学三年级以上 预设能力:可以回答一般性问题 所需时间:20分钟左右 适用人数:3个人到全班都适用
  90. 116 认为计算机终将有一天是智能的。询问他们怎样判别计算机是否是智能的。 2.引导学生通过提问题的方法进行人类和计算机之间智能差异的测试。如果班上没有同 学可以明确的说出两者的不同,那么计算机就通过了测试。Gina 和 George 将观众的问题传 给两个人,其中一个人给出人类的答案,另外一个人给出的是一台计算机可能给出的答案。 观众的工作就是找出谁给出的是计算机的答案。 3.显示表

    20.09 活动单中问题的清单。可以复印和分发这份清单,或可以在投影仪上放 映。 让学生选择哪一个是他们最先想提问的问题。一旦问题确定下来,让他们解释为什么他 们这个问题是适合分辨出人类和计算机的一个好问题。 因为这个推理将使得同学去思考什么 问题是一个有才智的人类可以回答出来, 而计算机无法回答出来的, 所以它是活动中最重要 的部分。 然后 Gina 和 George 传递问题,并返回一个答案。然后观众应该讨论哪个答案可能是来 自计算机。 用一些问题来重复以上的流程,直到观众确定他们已经发现哪个是计算机为止。如果观 众很快发现哪个是计算机了,Gina 和 George 将用秘密地抛硬币的方法来决定他们是否交换 角色,从而使游戏可以继续进行。 Connie 所读的答案与一些“智能”计算机程序产生的答案是不同的。一些答案可能是 用来快速辨认出是计算机的。例如,没人可能背诵 2 的平方根至 20 位,大多数人(可能包括 班上的同学)根本不会回答这个问题。当他们的答案是联合的,一些问题将会揭露计算机。 比如,“你喜欢……”的答案听起来似是而非,但是当你遇到太多这样的答案时,从这些问 题可以很明显的看出, 答案由一个简单的公式计算得出。 尽管同学们会觉得是人为造成的错 误,但一些问题的答案却表明是问题被曲解了。 许多答案是非常乏味的,但却是安全的,紧跟着的下个问题将更可能披露出计算机无法 真正理解的题目。对于计算机来说,回答“我不知道”是相当安全的,这样使得计算机更像 人类——我们会以为学生对一些问题也回答“我不知道”,例如:2 的平方根是多少。然而, 如果一台计算机常常给出这个问题的答案, 或给出一个非常简单的问题的答案, 并重复这个 答案,它将会透露其身份 由于计算机的目的是使提问者认为他们在与一个人交流,所以,有些答案是故意误导提 问者的——例如, 某个算法问题的延时的和错误的答案。 这些问题和答案本应该为讨论提供 大量线索。 变换与拓展 如果 Gina 同时扮演 George 和 Connie 的角色,这个游戏也可以由 3 个人来玩。Gina 传 递问题给 Herb, 记录他的答案, 并且记录来自表 20.10 活动单上的答案。 然后得到两个答案, 分别用 A 和 B 来区分这两个答案。 为了判断一台计算机在问答中是否能够模仿人,同学们应该具备回答表 20.10 活动单上 的每个问题的知识水平。 同学们可以提出他们喜欢问的问题, 并讨论他们希望得到的那种答 案。因为会话可能如何进行是不可能预测的,所以一些想像是需要的。为了更好的说明,表 20.1 和 20.2 显示了对话例子。前者举例说明了计算机也许能够正确回答 “真实”的问题, 而后者说明了讨论可能变的很广泛,并论证了一个人可能需要广泛的知识面。 有一个被称为“Eliza”(有时也称为“Doctor”)的计算机程序,这个程序适用于许多公 共领域的设备上。该程序模仿了一段与一个精神治疗医师的对话,并使用一些简单规则,生 成了显著的智能对话。 如果你能得到这个程序, 让同学们使用它并预测它是多么的 “智能” 。 与 Eliza 的一些对话将在以下讨论。(见表 20.3 和 20.4)
  91. 117 表 20.1 以上答案来自人还是计算机? 表 20.2 这些答案可能来自于人! 相关知识 几个世纪以来,哲学家一直争论机器是否能够模仿人的智能,相反地,人脑是否只不过 是机器运行的一个计算机程序。

    这个争论主要把人分成了两类, 一类人认为这种想法是荒谬 的,极其愚蠢的,甚至是亵渎神明的,而另一类人认为人工智能是不可避免的,并且认为我 们终将会开发出和我们有同样智能的机器。(数不尽的科幻小说作家指出如果机器最终超越 了我们人类的智能, 它们就有可能自己建造出更聪明的机器。 )有人批评人工智能(AI)研究者 借用高尚的理想作为手段, 从致力于研究独立的战争机器的政府手中吸引研究基金, 而这些 研究者谴责说这些反对者是勒德分子,并指出只要有更多的智能就能给社会带来显著的利 益。 一种更中立的观点是人工智能既不是荒谬的也不是必然的: 当目前还没有计算机程序能 够在任何的方向上显示出“智能”的时候,研究者是否能够实现他们的目的只是一个试验性 的问题,任何一种方法都还无法回答这个问题。 AI 的争论与智能的定义相关。很多定义被提出并引起争论。19 世纪 50 年代末,杰出的 英国数学家, 战时反间谍和长跑运动员图灵提出了一种有趣的建立智能的方法, 这种方法作 为一种“思想实验”。图灵的方法是实际可操作的——而不是定义智能,他描述一个计算机 可以论证的情形。 他的方案与上面的活动很类似, 方案的本质是让一个询问者通过电传打字 机(19 世纪 50 年代的最新技术!)与计算机和人交流。如果询问者不能分辨出两者来,那么 计算机就通过了关于智能的图灵测试。 电传打字机的使用是为了避免计算机因其物理性质和 音调而被辨认出来。可想而知,扩大活动内容:机器不得不模拟一个人的外表,声音,触觉, 甚至嗅觉——而这些物理属性与智能几乎不相关。 图灵最初的测试与我们的活动有点不同。他提议,作为初步的训练,设定方案为询问一 男一女,提问者必须判定他们的性别。男人的目的是使提问者相信他是女的,女人的目标是 问题:请以Forth Bridge为题写一首短诗。 答案:这题我认输,我从没写过诗。 问题:32957加70764等于多少。 答案:停顿大概30秒……105621。 问题:你下象棋吗? 答案:下。 问题:我的皇帝在K1格上,也没有其他子了。你仅剩下皇帝在K6格上和一个车在R1格上, 论你走。 答案:停顿大概15秒……车移到R8上,将死。 问题 短诗第一行 “我把你比喻成夏天”中的“夏天”改为“春天”是不好还是更好呢? 答案 这不符合韵律 问题 “冬天”呢,这完全符合韵律。 答案 是的,但没人愿意被比喻成冬天。 问题 你会说Pickwick先生使你想起圣诞节吗? 答案 在某种意义上会。 问题 然而圣诞节是冬天的一天,我并不认为Pickwick先生会介意这个比喻。 答案 我认为你不是认真的。冬天的一天就是典型的冬天的一天,而不是特殊的一天, 如:圣诞节。
  92. 118 使提问者相信她就是她自己。 然后, 图灵设想——因为这只是作为思想实验被提出——计算 机取代其中之一,并观察计算机是否能在“模拟游戏”中成功扮演人。因为同学提问来判断 对方的性别不太适合,我们为这个活动更改了格局,除此之外,活动引起了性别的判定—— 而非所谓的欺骗。 模拟智能是个困难的工作。如果角色被互换,且一个人把自己看做一台电脑,他们肯 定不能这样做: 他们会放弃那些自认为回答慢

    (也可能不确切) 的问题, 如 “123456 ×789012 的结果是多少?” 然而,对于计算机来说,掌握会话能力的表层内容是非常容易的。19 世纪 70 年代早 期,Eliza(上面提到过的)设计了一个著名的程序,在和用户对话中该程序模拟的是一位 没有指导作用的精神治疗医师。表 20.3 给了一个与这个系统会话的例子。一些接近自然交 谈的会话是由设备完成,例如: z 产生固定的反应(例如, 你能想出一个具体的例子来回答一些以 “他们总是……; 听到……我很难过;他说……”开头的问题吗?); z 呼应用户的描述(例如,你男朋友让你来这里,你会理解为:我男朋友让我来 这里); z 识别关键字(告诉我更多关于你家庭的事,回答会是:……妈妈……); z 一些常用短语(如果……对你来说意味着什么); z 来自前面对话的论点(那与……有关吗?)。 表 20.3 与精神治疗医师的一段对话吗? 当然, 这并不意味着已经通过了图灵测试, 因为人并没有以判别回答者是否是机器为目 的来提问:如果他们是以这个目的来提问的,很快就可以知道结果了。 当电脑销售副经理遇到终端(与某人的房子直接连接)时,一个被广泛引用的事件就会 发生,该事件可能是假的,但已经深入到人工智能领域。但在这种场合下, “精神治疗医师” 的程序恰好被运行。表 20.4 列举了对话的内容。副经理显然是被骗了,但这种情形使他认 人 男人都一样。 计算机 在哪些方面? 人 他们总会提醒我们一些事情。 计算机 你能想出一些具体的例子吗? 人 能,我男朋友让我来这里。 计算机 你男朋友让你来这里。 人 他说有时候我精神沮丧。 计算机 听到你精神沮丧,我很难过。 人 这是真的,我不开心。 计算机 你认为来到这里可以使你开心吗? 人 我需要帮助,这是肯定的。 计算机 如果你获得了帮助对你来说意味着什么? 人 或许我会学着和我的妈妈好好相处。 计算机 告诉我更多关于你家庭的事 …… 计算机 当你想起你的父亲使,你还有什么其他的想法? 人 欺凌弱小 计算机 那与你男朋友让你来这里有关吗? ……
  93. 119 为他在与人对话。如果他产生了怀疑,他会很快发现。 表 20.4 令人气愤的对话 另一个可能具有智能对话的程序是” SHRDLU”,这个程序是在 19 世纪 70

    年代后期开 发的,它可以接收指令来操控桌面上的木块。尽管用一个真正的机器人(至少在原理上)选 择木块并不是很难,但事实上,木块和桌子被模拟并以图片的形式显示在计算机屏幕上。图 20.1 描述了机器人的微观世界。机器人能够实现流利的对话,如表 20.5 所示。在其他方面, 这些图描述了机器人是如何执行命令,消除指令歧义,识别指示物,学习新名词(“塔形木 块”)。 图 20.1 机器人的木块世界 副经理 你认为我今天早上能使用计算机吗? 终端 你为什么要问? 副经理 我也许能做出一些额外的通讯销售。 终端 为什么你不确定呢? 副经理 我将来的客户还没有见过系统演示。 终端 这对你来说重要吗? 副经理 当然重要。 终端 看上去你对这件事情很有信心。 副经理 真荒谬 终端 “真荒谬”是指什么? 副经理 有我现在不能使用计算机的理由吗? 终端 告诉我更多关于你将来客户的事。 副经理 呼叫我请拨打491–1850 副经理忘了计时……计算机没有回答……副经理很生气以至于他给屋里的 人打了电话 副经理 为什么你对我如此无礼? 人 “为什么我对你如此无礼”是什么意思?
  94. 120 表 20.5 与机器人的对话 然而,这个系统是十分脆弱的,它产生的假象很容易被看出来。表 20.6 给出了对话 的后续部分,这部分对话事实上不是由程序生成的,但程序确实是可以生成的。在表 20.5 中,虽然程序可能定义新名词“尖塔”,但因为机器人的“智能”有极其有限的,所以只有

    非常有限的一部分术语被识别出来。 最后, 机器人不得不承认它不理解那些它使用过的词语。 (“对不起,我不懂得‘对不起’这个词”)!现在考虑表 20.7 中显示的变化的,完全虚构的对 话的后续部分,这对话可能是一个小孩说的。虽然很短,但是这个对话证明了他拥有大量的 社会知识。 z “机器人”知道如果你已经拥有了一支水枪,其他水枪就没有价值了。 z 而且,机器人希望人也知道这些,因为这对解释降低供应原因没有影响。 人 捡起一块大红色的木块。 机器人 好的。 当机器人执行命令时,系统回答“好的” 。为了能够捡起红色的木块,机 器人要清理绿色的木块,并寻找一块空地,把绿色木块移到空地上。 人 抓起棱椎木块 机器人 我不知道你是指哪块棱椎木块。 这里有 3 块棱椎木块,因此程序无法执行 人 找一块比你手上拿着的那块木块更高的木块,并把它放到盒子里。 系统必须分辨出“那块”和“它”分别是指哪一块,同时,使用推理来确 定拿的是哪块。 机器人 就“它”来说,我猜你是指那块比我手上拿着的木块更高的木块。 打印出来,以保证我们知道。 机器人 好的。 不得不放下手中红色的木块去捡起那块更高的蓝色木块 人 盒子里有什么? 机器人 蓝色的棱椎木块和那块蓝色木块。 人 棱椎木块由什么支撑 之前,系统会回答说“我不知道你指哪块棱椎木块” ,现在,系统知道我 们说的那块就是刚才提到的那块木块。 机器人 盒子。 人 是一个塔形木块……吗? 机器人 对不起,我不认识“塔形木块”这个词。 系统遇到无法识别的词会立即中断。 人 “塔形木块”是包含两块绿色立方体木块和一个棱椎木块的木块堆 这样引用表明我们正在定义新词。 机器人 我知道了。 人 现在有塔形木块吗? 机器人 没有。 新的定义已经作为识别塔形木块的描述使用了。 人 创建一个 机器人 好的 定义中所给的描述足够推演出一项方案,该方案是为了创建新物体并使机 器人识别这些新物体。 “那块”是指“一个塔形木块” 。
  95. 121 z 尽管如此,机器人知道,人想要木块,即使是用一些重要的东西来交换。 z 同样,机器人明白——不像水枪——木块是越多越有价值。 z 机器人试着通过贬低法国人来使人变柔和。 z 暗示着机器人准备讨价还价。 当然,这种人为程度超越了今天的电脑!

    表 20.6 (虚构)对话的后续部分 表 20.7 另一段(虚构)对话的后续部分 表 20.8 描述了一个现代计算机程序(19 世纪 90 年代后期)产生的故事。通过故事语 言的稀少和简洁,可以很快看出故事是计算机产生的。不难看出,给故事添加大量的修饰都 不为过。 但有意思的不是故事本身, 而是它所包含的情节。 故事情节与人为情节有较大差距, 但故事情节确实包含了一些有歧义的人为因素。 表 20.8 一个故事情节矛盾的故事 1994 年举行了一场比赛,该比赛采用了图灵测试的限制形式,并使一些判断者认为计 算机程序有了智能。然而,判断者不能使用“欺骗或诡计” ,且对话的内容是有限制的。判 断者的手被用绳子系着,在这个意义上,一些评论家认为测试是无意义的。像上述的活动, 限制对话可以阻止提问者从自然对话的探索领域出发, 并否决了证明知识的自发性, 创新性 和广泛性的可能,这些特点都是日常对话的特点。 没有一个几乎通过全部图灵测试的人工智能系统被创造出来。 即使有, 许多哲学家也会 认为测试没有真正的估量人们所谓的智能。 它测试的是行为等价: 其目的是确定某一特定的 计算机程序是否能显示出智力的特征, 这些智力与真正拥有的智能可能不一样。 没有这些像 人的智能:直觉、自我了解、意识、自尊感、爱……,你能活下去吗?人工智能的争论可能 会持续几十年。 人 用水枪跟你换取红色大木块。 机器人 对不起,我不知道“换取”这个词。 人 “交换”就是物品的自由调换。 机器人 对不起,我不知道“自由”这个词。 人 “自由”行动就是自愿的,没有强迫的。 机器人 对不起,我不知道“行动”这个词 人 “行动”是指人们有目的做某些事情,不是碰巧做。 机器人 对不起,我不知道“人们”这个词。 人 对不起,我还以为你过去比现在聪明。 机器人 对不起,我不知道“对不起”这个词。 人 用水枪跟你换取红色大木块。 机器人 我已经有一把水枪了, 但是我会用两个木块和一个棱锥木块来换取你那件泥 做的旧的刀饰带。 很久以前,北极圈有一个海鸥,名为杜鲁门。杜鲁门无家可归。杜鲁门需要一个巢。他 飞到岸上,寻找一些树枝,没有找到。他又飞到苔原,见到了一只叫贺瑞斯的北极熊。 杜鲁门问贺瑞斯,这里哪有树枝。贺瑞斯把树枝藏起来,并告诉杜鲁门冰山上有些树枝。 杜鲁门飞到冰山上寻找树枝,没有找到。贺瑞斯寻找肉,并发现了一些肉。贺瑞斯把杜 鲁门吃掉了。杜鲁门死了。
  96. 122 补充读物 哲学家约翰海于格兰编写的《人工智能:非常理念》 ,是一本有关人工智能争论书,该 书非常具有可读性,这个活动中的一些图表来自这本书(特别是表 20.7 和 20.8 和有关这两 个表的讨论)

    。 论文“计算机械和智能”描述了最初的图灵测试,这篇论文由艾伦图灵在 1950 年发表 在哲学杂志 Mind 上,并由 Feigenbaum 和 Feldman 编辑后出版在计算机和思想一书中。表 20.1 和 20.2 就是出自这篇论文。精神治疗医师程序是这样被描述的: “ELIZA——一个用来 研究人和机器的自然语言交流的计算机程序,由 J.Weizen-baum 在 1966 年发表在电脑杂志 联合计算机器通信。Terry Winograd 的博士论文描述了“木块—世界”机器人程序,这篇论 文被出版成书理解自然语言(学术出版社,纽约,1972) 。表 20.9 生成故事的程序,由 Tony Smith 和 Ian Witten 写在用于生成文本故事的计划机制一文中, 该文章在 1990 年发表在第十 届计算和人文科学国际会议会议录上。采用了图灵测试的限制形式的比赛由 Stuart Shieber 于 1994 年 6 月发表在联合计算机器通信。 1. 巴特辛普森的小妹妹叫什么名字? 2. 你如何看待 Roald Dahl? 3. 你是计算机吗? 4. 序列 3,6,9,12,15 的下一个数是什么? 5. 你如何看待核武器? 6. 2×78 等于多少? 7. 2 的平方根是多少? 8. 34957+70764 等于多少? 9. 你喜欢学校吗? 10. 你喜欢跳舞吗? 11. 今天是什么日子? 12. 现在几点了? 13. 闰年 2 月共有几天? 14. 一周有多少天? 15. 哪个国家的国旗是一个红圈在白色背景上? 16. 你喜欢读书吗? 17. 你喜欢吃什么食物? 表 20.9 说明:从上面列表中选择问题来提问人和“计算机” 。
  97. 123 表 20.10 说明:这些答案是为假装成“计算机”的人提供的。 1. 巴特辛普森的小妹妹叫什么名字? 我没记住。 2. 你如何看待 Roald

    Dahl? 他写有趣的书。 3. 你是计算机吗? 你是计算机吗? 4. 序列 3,6,9,12,15 的下一个数是什么? 18. 5. 你如何看待核武器? 核武器非常危险不应该使用。 6. 2×78 等于多少? 166(故意答错!) 7. 2 的平方根是多少? 1.41421356237309504878 8. 34957+70764 等于多少? 给出答案前停顿大约 20 秒……105621。 9. 你喜欢学校吗? 是的,我喜欢学校。 10. 你喜欢跳舞吗? 是的,我喜欢跳舞。 11. 今天是什么日子? 给出这周正确的日期。 12. 现在几点了? 给出正确的时间。 13. 闰年的 2 月共有几天? 2002 年和 2004 年是闰年。 14. 一周有多少天? 7. 15. 哪个国家的国旗是一个红圈在白色背景上? 我不知道。 16. 你喜欢读书吗? 是的,我喜欢读书。 17. 你喜欢吃什么食物? 我不饿,谢谢。