陈凯
某次信息技术教学研讨中,在讨论到枚举算法教学情境的时候,有位老师忽然说起,是不是应该将常用的寻找水仙花数(又称自幂数)的问题换成其他例子。所谓水仙花数,一般是指此数n位中各個数字的n次幂之和恰好等于该数本身,比如,153恰好等于其中各位的数字中1的三次方、5的三次方、3的三次方的和(若是四位数,则先做四次方再求和,依此类推)。这位老师解释说,寻找水仙花数的问题看上去没有什么实际的用途,甚至连数学家也还不清楚水仙花数和哪些著名数学问题能扯上关系,学生在日常生活中也并不会真的遇到这样的任务需求,很难算是一个真实的任务情境。由此引发出一番讨论:一个解决数学问题的需求,并且是一个看似并不具有什么实际用途的数学问题的需求,是不是适合用来当做信息技术教学的情境呢?
不妨想象这样的虚拟场景:某学者伏案许久,用纸笔寻找某39位数的水仙花数,在经过了数年计算后,这位可怜的学者忽然拍案而起叫道:“不,我不干了,我实在算不下去了,谁来发明一个机器来帮我一一检验吧。”瞧,这的确是一个可用于枚举算法教学活动的情境,不可否认,这样的场景距离实际生活十分遥远,但另一方面,寻找水仙花数的问题本身简洁有趣,含有某种对称的美感,而且任务需求直截了当,对应着枚举算法的工作特征,不少老师仍然认为这是一个好例子。慢慢地,争论逐渐从寻找水仙花数的情境是否适用于教学,逐渐扩展到如何在课堂中把握好编程和数学两者间的关系。要理清所讨论问题的思路并不容易,笔者请求大家不妨先回看历史,来了解一下莱布尼茨的梦想。
回到莱布尼茨之梦
莱布尼茨在年轻时就产生出一种在当时看似疯狂的想法,制造一种利用逻辑符号推导知识的机器,其大致想法是,人的头脑思考问题实际是利用语言和符号进行逻辑推演,那么用机器也应该能模拟人脑所做的事情,或许将来某些争论只要用机器计算一下就能得到结果。随着思考的深入,后来他把制造这种机器的步骤明确了下来:先是构建一种通用的语言符号系统,比如借用当时的数学符号系统(他还亲自补充了许多符号,如当今被广泛使用的微积分符号);然后就是要创设一种演算规则,如果要做什么判断,那么就先输入符号,根据演算规则对输入的符号进行变换并得到结果。莱布尼茨的设想后来被简称为“莱布尼茨之梦”。
这个梦想中的一些要素,其实早已被人们思考和讨论过。例如,稍早时霍布斯在《利维坦》中有这样的观点:人类心智所做的一切本质上都是计算,但霍布斯并没有像莱布尼茨那样系统地去思考如何用机器将这种计算实现出来;而早在中国先秦时代,《易经》中提供了一整套的卦爻推演方法,其中就体现出利用符号来对应现实世界中的信息并按演算规则进行自动决策的思想的萌芽(虽然实际使用时现实状况与卦爻符号两者间的对应比较勉强,难免掺杂臆断和附会)。
另外,莱布尼茨自称是毕达哥拉斯学派的最后传人,这个古老学派认为数的系统正是世界的本质,而不仅仅是对于现实世界所做的映射和模拟。莱布尼茨关于世界组成的单子论学说,其思想中的一些要素可以追溯到毕达哥拉斯学派的观点,但他走得更远,因为在单子论中,不仅仅是由单子之间相互作用组成了现实系统,而且每个单子自身也是整个现实系统的映射。这其中所蕴含着的分形系统和全息系统的思想,为何以一个机器能够把握现实世界中的信息并进行自动判断提供了依据。
当然,莱布尼茨没能实现他的梦想,即使到今天,虽然计算机已经能够进行逻辑推理,但要让机器参与哲学争论,尚难做到像人类那样优秀。在莱布尼茨的年代,很少有人能理解他的思想,因为他设想中的机器,离当时人们的日常生活实在太遥远了,大概讨论如何造一台能自动种地的机器更能引发人们的兴趣吧。
在数学和科学的发展历程中,可以找到许多研究项目,它们与当时人们的实际生活并无紧密的关系,欧几里德几何学的深刻性和系统性远远超出当时所需要的实用需求;开普勒研究天体运行轨道是为了证明世界的和谐;牛顿研究月亮上的重力当然不是为了去月亮上生活;人类研究素数的历史可以追溯到古希腊时代,但两千多年以来,关于素数的绝大多数研究并未直接对应什么实际用途,直到20世纪素数的运算规律被大量用于网络信息的加密。
这个世界科技的进步,一部分当然是由实用主义的需求出发的,而另一部分,也是极其重要的部分,是由纯粹的好奇心以及对于世界终极问题的追问所驱动的。爱因斯坦说:“科学如果要繁荣,就不应当有实用的目的。作为一个普遍的规律,科学所创造的知识和方法只是间接地有助于实用的目的,而且在很多情况下,还要等到几代以后才见效。”仔细想想,何以一种纯粹的好奇可以引领某个毫无使用价值的研究持续数十年乃至跨越数千年之久?从系统论的视角看,当代高度发达的科技文明成果,是内置于人这种奇特生物的“对世界作终极追问”的基因相互作用持续发酵所产生的涌现现象。这些追问涉及许多不同的方面,大部分问题在当时看并无实用价值却有走火入魔的嫌疑,比如“我是谁?我从哪里来?要到哪里去?”“世界为什么发端?时间的尽头会到来吗?”“世界是真实的吗?”或者像“能不能找到素数的分布规律?”“如何证明哥德巴赫猜想?”“所有考拉兹序列都能回到1吗?”,或者也可以是关于水仙花数的有趣问题,如“存在最大的水仙花数吗?如果存在,那么这个数字是什么?”只要承认当今世界科技文明的成果,那么这些追问哪怕没有实用性,也必须承认其重要的意义,因为这是科技文明涌现的组成部分。更何况,对这些“无用”问题的研究事实上推动了研究方法的进步。
面对着莱布尼茨的梦想,随着今天的孩子们噼里啪啦用键盘敲打各种符号和数字到某台机器中,想象着半导体元件中信号如萤火虫一样明灭变化,刹那间,唯一的一个6位的水仙花数跃入眼帘,用一个自动运行的机器解决一个计算的问题,这是多么有真实感的场景啊!而39位的水仙花数,也就是最大的那两个水仙花数业已被数学家找到,但孩子面前的机器却要花上十分漫长的时间来完成任务。让计算更快些吧!这当然也是梦想的一部分。
依赖自动机器的数学
牛顿力学中,星星很简单,每个星星都是一个质点,给予初始值,根据公式运算即可得出运动的结果。在气象学家眼里,虽然大气的每个粒子的行为都符合物理学,但大气的行为却很难预测,因为天气系统是一个反馈系统,由因产生果,果又成为因,极微小的初始值的变化会引发结果上巨大的不同,这便是混沌。人类本来希望通过数学来对现实世界进行刻画并预测未来,但由于混沌的存在,预测似乎成为不可能。但还有一种办法,就是将现实中的状况尽可能转化为数字和符号放置在变量中,然后创立一套包含反馈的演化规则,人工将这些变量值的变化一步一步持续运算跟踪下去,若初始状态值足够多和精细,演化规则足够接近自然变化规律,那么只要能赶在自然变化之前将跟踪工作完成,就能实现所谓的“预测”了。
既然人的头脑太慢,那就交给机器去做,从某种意义看,这像是泄露天机,为了预测更加精确,或为了预测更加长远,无疑需要更好的机器和更好的算法。
考虑这样的场景,某岛屿上有一些繁殖力旺盛的兔子以及恒定产量的食物,兔子的繁殖率是固定的,但存活率却和食物的相对充分程度有关。生物学家对兔子的生活状况作短期观察后,可归纳出每隔一定单位时间兔子数量迭代的规律。由于反馈的存在,如若迭代过程长时间进行下去,结果的数据是非线性的,所以无法借助当前少数几天的数据直接猜测得到若干天以后的局面,除非将计算一直跟踪到若干时间单位之后。如果生物学家在这个系统中还引入了捕食兔子的狼群,那么数据的变化就更加变幻莫测,他最好是编写一段程序代码来帮助自己进行计算工作,这样才能更有效地将那些由局部数据获得的演化规律用于更宏观的场景。除了通过观察并得到演化规律,还可以反过来用“猜”的方法,比如借助多主体建模,在计算机中“养”上那么一群虚拟兔子,赋予它们一定的随机活动的能力,赋予不同的参数比如胃口、耐饥程度等,由此得到不同参数下的演化数据,并将这些数据与现实情况加以比较。
这个简单的例子说明,可以结合使用数学和计算机模拟的方法对自然进行探索,数学公式的作用是展现自然现象变化的规律,但即使变化规律是简单的,在多个对象协同运作或自我反馈的过程中,也会呈现出难以通过局部数据把握宏观复杂现象的情况,这时候就要依靠计算机编程建立起模拟系统,来对自然界的现象进行仿真。显然,数学与编程相结合来实现模拟与仿真,是信息技术教学与其他学科整合的一条值得探索的路径。
依赖数学的自动机器
图灵的图灵机可以看成是当今普适计算机的一个原型机,有意思的是,图灵机这个设想是为了解决数学上的可判定性问题。图灵将数学上的计算过程转化为机械过程,从而使得论证过程高效简捷。在后续研究中,图灵还论证了图灵机具有普适计算的能力,其大致思路是,证明可以用图灵机模拟任何一台执行其他计算任务的图灵机,用今天人们熟悉的术语说,那台模拟其他图灵机的图灵机相当于计算机硬件,而被模拟的图灵机相当于计算机软件,两者其实是处于不同层级的系统。若对比观察图灵机的运行过程和阿隆佐·丘齐(Alonzo Church)的Lambda演算过程,就知道两者在逻辑上是等价的。Lambda演算过程中运用的规则是简单的,基于简单的规则可以创建出各种数学应用上的函数,但创建过程抽象到让普通人难以接受。相对而言,图灵机的规则也是简单的,但用图灵机规则的组合来解决数学问题,运作形式上要直观很多。但两者的共同点是,它们都借助简单的系统的组合来构建出复杂的系统。在系统科学中有一项研究,就是讨论如何将很多个图灵机组合起来实现一个具有自学习和进化能力的系统。
目前絕大多数的计算机都等价于普适图灵机,这些机器都是不同的抽象的计算模型实体化后的成果,实现这些模型依赖大量的数学上的成果,比如布尔代数、线性代数、离散数学、概率统计、微积分等,而对于实现人工智能的机器学习模型,离开数学简直是寸步难行。实现计算模型中的计算思维,在许多地方和数学思维也是重合的,比如模式识别与类比的思维、抽象与编码的思维、形式化与自动化的思维等。
与数学不同的是,信息技术借助系统科学和工程学的方法,将抽象的符号和数据的演化直观模拟出来,或直接制造出计算装置实体。信息技术教育的关注点不应该仅仅在于如何使用信息技术的工具,也要关注自动计算的机器何以可能被制造出来的问题。在中国大力振兴信息产业,尤其是半导体产业和人工智能产业的今天,加强这方面教育教学的力度就显得尤为重要。
文章最后,再回到水仙花数的问题,2006年,有一位名叫王天权的乡村小学老师在《数学通报》杂志上发表文章,内容是关于用Basic语言编程寻找出世界上所有的水仙花数的方法。是不是会有人质疑,用一个功能有限的初学者程序语言解决一个没有什么实际意义的数学问题,这到底有价值吗?虽然文章的发表本身就是肯定,但笔者还是想多说几句,在2019年,新发现了第51个梅森素数是2的82589933次方减1,若将这个数字打印出来将有超过100公里的长度,显然,这个数字本身没办法用在任何场所,但数字的寻找,却需要尖端计算能力和有效数学方法两者协力支持;而另一方面,虽然说站在巨人的肩膀上,也能一时借用到非凡的力量,但倘若自己不是巨人,那还是要做好从Basic(基础)开始成长的觉悟。
作者单位:上海市位育中学