2016年5月27日上午10时,在老师们与来自十一个班的班长们的组织下,中国科学院大学2015级计算机导论课进行了一场人体计算机模拟实验。实验以班为单位分组,每一个班选出8个人,每两人分别作为控制器,监视器,记录仪和控制器,其余同学作为输入数据。我们希望通过人体模拟实现计算机的快速排序操作。也即,一个混乱的队列通过快速排序方法,在有限的时间内使得这个队列内的人从高到低排列。
在上课开始之前,我们实验场地--草地上已经是人声鼎沸。许多同学都对今天的实验表现出极大的兴趣,一个个跃跃欲试。从他们脸上洋溢着的笑容可以看出大家都已经做好了充足的准备。同学们在各自的组里做着最后的准备,有的在大声的讨论自己的算法,有的在招呼同学们随机站队,还有的在认真选择实验场地。
尽管在实验前已经做了许多的准备,但是在实验过程中,许多组还是遇到了一些突发情况。我相信在以后的科研生活中我们都会遇到各式各样的困难,这一次实验提高了了我们处理突发情况的能力,增加了我们的信心同样也加深了我们对系统思维的理解。
比如1511班的许多同学身高差不多,控制器很难通过肉眼识别出同学们的高度差异。这也就导致了相同的一组人会有不同的排序结果。1511班同学对这一客观事实进行了抽象化,从而得出了要得到一个完全正确的结果,首先需要任意两个身高可比较,其次比较函数要足够精确的结论。显然肉眼作为比较设备是无法提供足够精确的比较的。然后他们采取了背靠背且由多人检查的比较方式,极大地减少了出错率。
对于类似的问题,1502班创新性的提出了用照片判断结果的正确性。方法如下图:
在拍出来的照片上以最下面一条黄线为底线,等高线与蓝线平行,显然图中第二条黄线说明了结果的正确性。
1505班的同学在实验中意识到草地的不平整对于实验结果有极大的影响,他们将自己的实验场地转移到平整的水泥砖地上。事实上很多班级都意识到了草地不平整对于比较结果的影响,但是只有1505班做出了积极的调整。事实上他们已经在无意识中注意到了系统处理中个模块的协调性问题,通过改变实验场地,增强了系统与程序执行的稳定性。
在实验过程中,同学们都没有使用课本上现成的算法,而是通过自己的想法,创新性的提出了一些新的算法和想法以便于在人体计算机中操作。第一种算法是随机选一个同学,把比他高的放在右边,比他矮的放在左边。那么这个同学的位置已经确定。以类似的方法给左边和右边排序,直到所有人位置都确定。第二种算法是所有人只能存在对换,也是较为常用的快速排序算法。为了使第二种算法便于操作,1510班让控制器带着标杆身高和其他人比较,保证快速排序过程中同一时刻只有一位同学在运动。同时也提高了算法的运行的正确性。
1508班的同学们将两种算法抽象到现实计算机中考虑,发现了第一种排序方式在操作上简单,但是其中默认了有多个储存位置。并且人肉的每一步操作可能对应计算机的多次操作,(人可以让一让,中间插个人,计算机的储存条可不行,必须移动数据,也有可能溢出)。因此真实步数需要重新计算的结论。而第二种算法在计算机上实现起来要方便得多。
在算法设计与实现上,每一个班级都有自己的想法,也都加深了对于系统的理解,充分展现了果壳学子的巨大的创造力和执行力。
徐志伟老师在最后的总结中给了我们极高的评价。他说,本次人体计算机实验的结果出乎他的意料。他同时也强调了,设计本实验是希望培养同学们形成系统化思维,理解系统思维中通过抽象化,将模块组合成系统无缝的执行的本质。