張飛 清华大学终身学习实验室课程设计主管 算法 是“计算思维”或“人工智能”的核心内容。在小朋友们的日常生活中,与“算法”关系密切的事物之一,就是“互联网搜索”。 很多六、七岁的孩子已经可以熟练的使用互联网搜索引擎了,但是他们能理解其背后的搜索算法吗?特别是在“不插电(不用任何电脑等 Hich Tech 设备)”的教学环境下? 我们是酱紫教孩子搜索算法的。 课程目标 ☆ 理解并在游戏中运用三种常用的数据搜索算法:线性 ( sequential ) 搜索算法、二分法 ( binary ) 搜索算法、散列 ( hashing ) 搜索算法。 ☆ 培养计算机科学素养。 课程工具 ☆ 洗手液 (最好是免冲洗) ☆ 写有数字的卡片 ☆ 健康好吃的糖果 ☆ 游戏《大海战》图纸 & 签字笔 ☆ 白板&白板笔 课程时长 120分钟 课程设计思路 ☆ 线性算法就是逐一比对数据,是最简单、最低效、没有什么“算法”的算法。 ☆ 二分法算法用于已排序数据,每次取中间值查询,不断缩小范围。 ☆ 散列法算法是将数据按照一定的方法换算成便于查找的关键字,所有的关键字组成“关键字表”,然后按照关键字表分组数据。这样在查找时可以快速定位到数据所在组,并在组内进一步查询。 对于这个年纪的孩子来说,本课程更多的是“计算机科学素养”的培养,而非“算法课程”;因此对孩子的要求仅是理解和游戏中的应用。 因为课程运用了一定的数学知识,有一定难度,为了避免枯燥,课程设计要注重强化趣味性。 因此,特意设置“暖身”环节,并在课程中全程用游戏贯穿教学内容。 暖身环节让孩子快速体验线性算法,并思考排序数据的搜索算法,带着问题进入主体游戏。过程中加入糖果小奖品,强化娱乐性。 主体游戏采用海战游戏的形式,两人一组;用三套棋盘分别执行三种搜索算法,让孩子在游戏中体验算法的使用环境和执行效率。 课程后让孩子向父母讲述三种搜索算法的基本原理,强化理解。 课程预备 ☆ 两位数的加减乘除运算 ☆ 英文字母表 课程设计详细流水账 “全都去把手洗的干干净净的!我们一会儿要吃好吃的!” 从第一句话开始,我就在调动他们的情绪。要是不让他们燃起来,这两个小时的“数学课”可不好上。 如果可以给孩子们准备免冲洗手液更好,普通洗手液也可以,让孩子们把手洗干净,好抓糖吃。 接着让孩子们手拉手围成一个圆圈,用“手心手背” + “猜丁壳”确定一个站在圆心的孩子。 这个孩子会有机会获得更多的糖果,所以选择过程一定要严格、公平,不然一定会有孩子不满意。 给外圈的孩子每人发一张写有数字的卡片,让孩子捂好,只有自己能看到数字。 给圆心的孩子一个装有糖果的盒子,糖果数量等于外圈孩子的数量。 然后我开始宣布游戏规则:老师随机给出一个卡片上的数字,圆心的孩子要用提问的方式,找出持有这个数字的卡片的孩子。她每问一个孩子,被问的孩子就要亮出卡片,同时得到一块糖果;直到最终找到数字,此时盒子里剩下的糖果就都归圆心的孩子所有。(所以理论上,圆心的孩子最多可以拥有 总数-1 个糖果,最少一个都没有。) 圆心的孩子会想方设法寻找蛛丝马迹,察言观色;圆圈里的孩子也会叽叽喳喳筹谋划策,但还是会毫无头绪,最后只能一个个的蒙(其实就是在实施线性搜索算法)。 找出数字后,一起做一个小小的总结。我们用了什么办法找到老师给的数字的?一个个问的。有更好的方法吗?好像没有。 好,下面我们开始升级游戏。老师给圆心的孩子也发一张数字卡,让她站回圆圈;所有的孩子按照卡片数字顺序排列,重新站队,围成一个新的圆圈。 大家可以一边吃糖,一边在老师的带领下共同思考:在重新排序的情况下,我们想最快找到一个数字,该怎么办呢? 孩子们会有各种奇思妙想的方案,不过都有问题。这个时候老师不能揭晓答案,要让他们畅所欲言,再用提问的方式,帮助他们发现问题,进一步思考。带着思考,我们结束热身活动,准备开始正式游戏——大海战! 开始前,我必须先把今天的主题引出来,要让孩子明白我们在干什么。 “有谁用过互联网搜索?” 齐刷刷的举手。 “老师我拿我爸手机用过百度!” “老师我用谷歌不用百度!” “老师我用过美团外卖!” 果然是移动互联网原住民啊,我像他们这么大的时候连计算器都没见过。 但是有长处也就有短处。没有经历过数字时代的发展,他们就会缺少一些计算机科学的基本常识。 我曾遇到过孩子甚至以为,电脑里就真的有一个个图标,一个个窗口。 这也是我们设计这节课的最主要目的:给孩子一些计算机科学的“基本素养”。 “那么大家想过没有,互联网上那~~么多的信息,搜索引擎是怎样那么快的找到他们呢?” 小朋友们马上张大了嘴巴,一脑袋问号……是哎,好像从来没想过这个问题啊!是怎么找到的呢? 我转身在白板上写下两个字:算法。 从这里开始,正式把算法的概念教授给孩子。 当我们在大量的数据中搜索的时候,我们要用到一些巧妙的的计算方法,来加速搜索的过程,这就是“搜索算法”。 “大家先想想刚才的小朋友是怎么找到数字的?” “她蒙的!” “她一个一个问的!” “那么一个一个问是不是一种算法呢?” 是的,这是一种算法,一种最简单的算法,我们叫它线性算法,或者顺序算法。当数据量不大,排列无序,数据本身很简单的时候,这也不失为一个有效的方法。比如刚才玩的热身活动,搜索简单的数字而已,一个个问其实是最快的。 “下面我们就来一起玩一个很紧张刺激的游戏,《大海战》!看看我们能不能用算法来取胜!” 下发第一套海战图和签字笔。孩子分成两人一组,一人持图1A,另一人持图1B。 老师宣布游戏规则:游戏目标是用最少的炮弹击中敌方的军舰;游戏开始时,每人选择一艘自己的军舰,告诉对方军舰上的数字(不是英文字母!);两人轮流猜测军舰所在的位置(英文字母),每猜测一次,计导弹发射一次;用最少数量的导弹击中对方军舰(猜到军舰的位置)者获胜。 有了刚才的热身活动,孩子们马上明白,这些无序的数字,没有什么好想的,一个一个猜,看谁运气好。 真有一炮命中的,兴高采烈。也有二十几次才猜到的,好在场面很热烈很欢乐,小朋友也不会很沮丧。😂 进行的差不多了,带着孩子简单小总结一下: 可能的最大分数和最小分数分别是多少?26 和 1。 这些数字排列有规律吗?没有,无序的。 大家用了什么方法?线性算法。 还有什么好方法吗?孩子们说了一些。嗯!Good Try!但是基本还是在蒙。 接下来,海战升级!给大家发放第二套海战图:2A 与 2B。 还是老师带着孩子先观察:看看这次的数字有什么不同? 孩子们看出来了:数字越来越大! 是的!这次海战,战舰数字是按顺序排列的! “还记得刚才我们也遇到了这种情况吗?当时大家都想了什么方法?现在就可以试试!” 规则与第一轮基本一致,只是在每次猜测时,需要告诉对方“大了”或“小了”。 如果没有学过,几乎不会有孩子能想到要取中间值不断逼近。 但是他们也会有很多很好的尝试,比如有的孩子会想:“我要取一个比较靠近最大值的位置,如果小了,那我就能排除掉很多可能性!但是万一大了怎么办呢?那我就取一个靠近最小值的值!可是……”他就陷入死循环了。其实他离真理只有一步之遥了。 ![]() 看火候差不多了,老师可以喊停了。听孩子们说一说自己的想法,经过引导后,可以在黑板上写下第二个算法的名字了:二分法。 二分法的神奇之处在于,即使数据量翻了一倍,我们也只要多加一次查询。当数据量不断翻倍的时候,二分法的魔力就凸显的更明显。这里,还可以给孩子讲一讲“阴险的老爷爷让不懂数学的国王往国际象棋盘里放米粒”的故事,孩子们会惊讶于指数增长的神奇力量,反过来想一想,就明白了二分法的强大威力。 ![]() 再回到我们的游戏,如果用二分法,最多几次就能打到敌舰?孩子们一算,5次!好,趁热打铁,再做几个小练习:老师心里想一个100以内的数,让大家用二分法来搜索;再来个1000以内的数,再练一次。到此,孩子应该可以熟练使用二分法了。 游戏再次升级! 第三次大海战马上开始!给孩子们发第三套海战图:3A 和 3B。 ![]() ![]() 和孩子一起观察,这次的数字又有什么不同? ![]() 其实孩子观察不出来,还是宣布好了。🤣 每艘船上几个数字之和的尾数与船所在的列数是相同的! 其他的游戏规则还是和之前一样。 “哇!那这次太简单啦!”孩子们能这么说,说明他们的思路非常清楚。 开始玩吧! ![]() ![]() 这次进行的非常快,很快都得出了结果。 大家用了几次击中了敌舰?最少一次,最多四次。为什么是四次?因为一列里最多只有4艘船。 像我们这样,把搜索的数据按照一定方法算出一个关键字,很快定位到一个很小的范围,再在小范围内去查找的方法,叫做——我转身写下第三个算法的名字——散列法。 其实散列法我们大家可能都用到过!有小朋友翻看过微信里的联系人吗?我们按住联系人右侧的小字母,就可以快速定位到姓氏拼音首字母的位置,再在这个首字母里去寻找,就非常快了。这其实就是一种散列法的运用。 ![]() 那么线性算法、二分法和散列法,哪一种最快呢?在实际使用中,散列法一般是最快的一种方法。但是如果分组方法不够好,在同一列里有太多的数据,散列法就很低效了。所以我们面对不同的数据,需要具体分析,使用合适的搜索方法! 好了,感觉孩子们烧脑烧的差不多了。最后布置一个作业:回家把这三种搜索方法给爸爸妈妈们说明白了。只要能说明白,我们的教学目标就达成了。 下课! ![]() 关于《不插电的编程课》 本课程是清华大学终身学习实验室《不插电的编程课》系列课程中的一节。 此系列课程面向刚刚步入小学的一年级学生,旨在用最简单的工具(摆脱电脑等复杂、昂贵的教具的限制),游戏化的学习方法,教孩子学习计算机科学知识。 关于Project X Project X是TULLL是一门实验性质的课程,面向6到7岁(小学一、二年级)的小朋友。Project X 的教学目标是尽可能的开发孩子的创造力。 Project X可以被理解为“编程实验班”,但我们使用的主要学习工具远远不限于是编程。电脑编程仅仅是提升创造力的落脚点和工具之一。 目前Project X第一期已经开课,未来可能会有其他课程,请您关注TULLL的公众号。 特别鸣谢 ![]() 本课设计过程中,得到了 TULLL研究主管、清华大学心理学系助理教授伍珍老师的大力帮助。 她在建立儿童自信心、成长型思维,培养儿童创造力方面,给出了诸多建议。 在此特别鸣谢! |
|