首页 > 代码库 > 排序算法的体验游戏

排序算法的体验游戏

  今天监考排座位时出现了一些混乱。

  我要求他们按顺序每列N人坐好。若学号是连续的,1到N号第1列,N+1到2N号第2列,这个好说。乱就乱在,参加考试的同学的学号不连续,中间有断号。规则说来简单,若2号、3号空缺,4号需要直接坐在1号后面。

  由于手头没有名单,这对于每位同学而言,确实困难,35号必须要看到前面紧临的31号坐定才能确定自己的位置。这是一个必须顺序完成的任务。一时间,学生们陷入相互等待,在教室后面缩成一堆,谁也不动。最后,我和班干部采用了逐个叫号的方式才将坐位排定。

  坐定之后,我对同学们只知道面面相觑表达了不满。解决这个问题,学号小的同学应该立即行动找到自己的位置,学号大的同学紧随其后,可以相互间及时交流学号信息,确定谁前谁后。在大学中的学习,除了专业知识,其他的素质也要提高。这件事情,反映出了在共有需求(早坐好,就能早发卷)下,整个群体或者是对规则缺乏理解力,或者就是相互观望相互依赖性太多。执行力、领导力在这件事情上能够体现,立刻主动地行动,而不是等谁挨个叫号,培养的也就是这样的素质。

  我和同学们说,如果这是一场招聘会,给出一个规则,谁能够迟早掌握并及时做出行动,这个人将占得先机。如果这是在工作中的一个场景,竞争对手间谁脱颖而出,结果很显然。立即行动,作为一个很重要的习惯要自己培养,事事可以培养。

  考试开始了,同学们进入了紧张的答题。无聊的监考老师,此刻却是头脑中可以极尽自由的时候,各种胡思乱想,随便。

  我想到,刚才的事情,就是一个排序问题。排序,是计算机科学中的一个基本问题,无论计算机求解问题,还是日常生活中的问题,排序随处可见。这些学生这学期正学数据结构和算法,这件事,他们可以用学到的算法作指导。

  在程序设计课程中,我提倡同学们自己做点卡片写上数字,按算法流程比较、移动,体验排序算法。最简单的,直接用扑克牌就可以。匈牙利 Sapientia 大学的大学生,将 6 种排序算法编成舞蹈,很是好玩(点击“链接”可以看到的是其中的冒泡排序舞蹈秀)。我曾经和儿子一起,拍过一个扑克版的排序视频。

  传统的这些算法,都是单控制流的。程序设计、算法与数据结构课,也只关注单控制流的算法。

  今天的场景,可以编排成一个体现多控制的排序游戏。再说高大上一些,归为多处理器的并行排序,或者多Agent的协调,都可以。

  游戏规则:制作 n 张卡片,印上随机的数字,随机的发给排成一行的 n 个游戏参与者,相邻的人可以互看卡片比较大小,必要时交换位置,最后按手持卡片中数字的顺序排好顺序。要做的基本操作只是比较、交换位置,是多人同时进行的。在这里,每个人,就是一个处理器,就是一个Agent。为增加游戏的趣味性,由两组或多组人同时做这一件事,最快者获胜。要在课堂上玩,简便的奖惩手段,由赢者刮输者的鼻子。

   还可以让这些人坐在教室中的同一列座位上,坐着的人不动,前后相邻的人交换卡片。一样的道理。

  这个游戏前,不必讲并行算法的思想,可以重复几次,学生群体借此悟到有效的策略。

  除了体验排序算法,这个游戏的功能还有团队精神和合作能力的培养——每一个“处理器”都需要努力,才能尽快地完成,任何个人的迟疑、等待,都不利于团队最终的目标实现。不得不说,当前的大学生人人都想着自主,但凡事都等着有人统一指挥,缺少了在团队中的等量投入,自己的自主能力也得不到提高。

  这个游戏,以后可以用到课堂里,也可以用到课外团队拓展训练中。用这个游戏训练过的学生,安排座位不用这么费劲,做其他事情也会不一样。

  有闲的监考,带来了好点子。





=================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
|== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====