北大李晓明教授:从趣味数学到趣味算法到趣味编程——非专业学习者体会计算思维的一条途径?

计算思维谈了十多年了。如果于概念辨析的层面探讨,似乎还没有形成共识的“定义”。事实上,并非任何事情都要先搞清楚定义才能展开内涵研究和实践,许多方向性的话题,本就不好下定义。然而,十多年没搞清楚定义,却还有人愿意继续谈,一定是这个词语后面蕴涵着某种比较广阔的人们觉得有价值的东西。于是,可以重点讨论或者展示些具体的做法和例子。是否属于计算思维的范畴,有些不同的看法也正常,重点是事情具体了,价值就容易判断。

本文提出一种教学思路,面向非计算机专业的学生(这里不一定只是在校生),不追求让他们系统掌握什么,只是希望通过一种过程,让他们感受到“计算思维”的魅力。

这个过程应该是轻松愉快的,否则感受到的就不是“魅力”了;这个过程也应该是有挑战性的,否则感受到的就不是“计算思维的魅力”了。我们姑且把这个过程称为“从趣味数学到趣味算法到趣味编程”,或者短一些,就叫“趣味数算程”。

1从趣味数学说起

为什么起点是“趣味数学问题”而不是什么“生活中的真实问题”?这是另外一个话题了。用生活中的真实问题作为引导,当然也是有价值的。这里可以说的是,用已经抽象好的趣味数学问题作为引导,不仅有价值,而且对初学者来说会相对容易些。

这里,可能有敏感的读者会提问题:“等等,计算思维不是强调抽象吗?用已经抽象好的问题作为出发点,不就丧失了体会‘抽象’的机会?”

我的回答是:“这里只是完成了‘数学抽象’的问题,计算抽象还在后面呢!”

这样一种说法,得益于最近这两年参与讲授一门北大社会学系的课程,对于我讲的那些内容的风格,学生给了一个概括:概念抽象→数学抽象→计算抽象。可以说,这真是教学相长了。我自己先前就没总结出这么漂亮(而且贴切)的说法,只是朴素地凭感觉铺陈那些内容。

为什么以趣味数学为起点?还有一个个人的原因。记得大约是上小学三四年级的时候,不知从哪弄来一本书,叫《趣味数学》,上面有许多有趣的小题目,不是都看得懂,但其中一些内容已足以让人很有兴致,有些题目直到现在都还记得,偶尔会在脑海中蹦出来。当然,那本书后来就不知去向了。

前年某个时候,不知怎么又想起了它,抱着试一试的心态,到一个旧书网,居然淘到了这本1961年少年儿童出版社出的书(如图1所示)。翻一翻,非常亲切。结合最近这几年参与编写基于高中信息技术新课标的教材《算法初步》,意识到许多趣味数学问题(或者说数学游戏)的解,都是一个过程描述(即先做什么,再做什么,然后做什么等),也就是一个“算法”了。不过从讨论“计算机算法”的角度,那些问题有局限性,即它们都很具体,相当于计算机科学中某问题的一个“实例”。

图11961年少年儿童出版社出版的《趣味数学》

于是,一个思路自然浮现出来:从《趣味数学》中的问题出发,将它们一般化,讨论在一般化情形下的解,即计算机算法,最后用程序予以表达,从而形成一条从趣味数学到趣味算法到趣味编程的途径。

2从趣味算法到趣味编程

《趣味数学》中适合的问题有很多,由于篇幅原因,本文仅通过下面这样一个例子展现这条途径的风格,也相信读者能有更多、更好的例子。

《趣味数学》中的一个问题:移棋子。将黑白6只棋子在桌上黑白相间地排成一排——黑白黑白黑白,左边留出够放4只子的空位,现在要把这6只子移成3只白子在左边、3只黑子紧接在右边的样子(如图2所示)。要求是必须一次并列移两子,把它们移到空位上,不能更改子的顺序,只可移3次解决问题。

三年级以上小学生能理解这个问题。想一想,试一试,10分钟内通常就能解决,也就是给出了一个三步骤算法。这里留给读者来做。

但我们不能就此满足。现在3对黑白相间棋子的问题会求解了,那么如果是任意n(n>3)对,是不是也会求解呢?我们需要有一个以n为参数的计算机算法!

怎么做?对熟悉计算机科学的人来说,马上能想到的可以试一试的思路就是“约简”。希望求解关于n的问题,就看能否先解决n-1的问题,然后在那基础上做些“增量性”工作,得到关于n的解。这种思路递归下去,到了n=3,就可用前面提到的办法了。于是,重点就在于“增量性”工作该怎么做。图3(a)展示了一个方案:以3对棋子已经移好了作为初始状态,经过靠拢、交界、到位、凑整、回填5个步骤,完成4对棋子的移动任务。

审视这5个步骤,我们能体会到这种增量性操作具有一般性,也就是在4对已经完成的基础上再用类似的5步,就能完成5对棋子的移动任务等。至此,作为算法描述和理解也就透彻了,的确看到了一个对所有n>3的解决方案。我们实现了一个从特殊(n=3)到一般的升华,从趣味数学到了趣味算法。

那么,若编出程序来,还能带来什么新的价值吗?是的,如果我们心目中的程序是要基于输入n,一步步输出展示一个类似于图3(a)所示的过程(当然还要加上最初3对是怎么完成的),就会有至少两条很有价值的考虑:

首先,信息的表示,即如何在程序中用数据表示棋子局面的状态和变化过程。简单起见,只考虑字符方式。程序的执行,就可能想象输出如图3(b)所示的结果。从学理的角度讲,就是要体现信息和数据的关系,利用编程语言提供的能力,做一个从信息到数据的映射。

再者,这样一个针对n的过程,显然有递归的味道,当然可用递归实现,同时也很容易用迭代来实现,也就促进了对这两种基本方式的理解和运用。图4就是一个完整的程序(迭代方式),图3(b)则是它的一次执行结果。

这种程序本身并不复杂,可一旦实现,带来的却是惊喜,因为它意味着走完了一条有点曲折,但每个弯都能过去且引人入胜的途径。《趣味数学》中的许多例子,都有类似的样式:从算法的角度分析清楚后,最后落实到程序都不需要专业的编程能力。

3结语

如果有进一步的追求,马上可以问的问题是:前面说的这个算法在效率上是最优的吗?如果有n对棋子,现在的做法是需要35×(n-3)次操作。还能否再改进?结论是可以的,但如何能简单描述,则是另一个层面的挑战了。

经常会听到这样的纠结:非计算机专业的学生该不该学编程?如果该学,该如何学?当然,非计算机专业也有不同的情况,这里主要谈传统上认为离得比较远的,如社会科学专业的学生。

我现在认为,他们应该编程,但没必要“学”编程。这里给“学”打上引号,是指那种很正式地选一门计算机语言编程课的方式。那么,不学怎么会呢?答案是“在用中学”!就像一些应用软件,人们都没有“学”,但都在不同程度(不同水平)上用一样。类似于Python这种层次的解释型语言,是可以高效“嵌入到”一些问题求解过程中的。这种过程可能需要抽象、分析、推理,也可能需要写些文字,还可能需要算出几个数,对某些现象进行简单模拟,于是需要写几行代码等。这就是“面向问题求解”,而不是为了编程而编程。本文以数学游戏问题为例,展示了一条途径。不同专业学科自然可以选择各自的问题作为出发点,培养训练这种“融会贯通”的能力。

引文格式:李晓明.从趣味数学到趣味算法到趣味编程——非专业学习者体会计算思维的一条途径?[J].计算机教育,2020(11):优先出版.

THE END
1.学习笔记《趣学算法》OniisanRui学习笔记 --《趣学算法》 算法 前言 算法作为一门学问有两条几乎平行的线索。同一个数据对象上有不同的问题,就可用到不同的算法策略。不同数据对象上的问题也能用到相同的算法策略。 数据结构(数据对象):数、矩阵、集合、串、排列、图、表达式、分布等。https://www.cnblogs.com/oniisan/p/algorithm.html
2.趣学算法(第2版)本书是用轻松有趣的方法学习算法的入门指南。按照算法策略分为8章。第1章以算法之美、趣味故事引入算法,讲解算法复杂度的计算方法,以及爆炸性增量问题。2~7章讲解经典算法,包括贪心算法、分治算法、动态规划算法、回溯法、分支限界法、网络流算法。第8章讲解实际应用中https://www.ptpress.cn/bookDetails?id=UB7db2f4c12a6b7
3.趣学算法(36集带你高效学算法!)分类:算法与数据结构, 总时长: 10小时56分54秒 价格:87.2 详情 目录 第1集 算法复杂性计算方法 第2集 贪心算法秘籍 第3集最优装载问题 第4集会议安排问题 第6集二分搜索(1) 第5集分治算法秘籍 第7集合并排序 第8集快速排序 第9集 动态规划秘籍 https://www.epubit.com/courseDetails?id=PCC71fabb3e7425a
4.趣学算法(第2版)图书简介 《趣学算法(第2版)》从算法之美娓娓道来,没有高深的原理,也没有枯燥的公式。通过趣味故事引出算法问题,包含50多个实例及海量图解,结合学生提展开短评 打开App写短评 Marvin不慌2022-10-25 09:34:26 非常好的书,图解多,每个问题分析清楚,用图解显示求解过程,适合算法入门,题目阅读起来有趣很多,配套https://m.douban.com/book/subject/36126727/
5.趣学算法(陈小玉)应用技术相关资料下载趣学算法 (陈小玉) 本书内容按照算法策略分为7章。 第1章从算法之美、简单小问题、趣味故事引入算法概念、时间复杂度、空间复杂度的概念和计算方法,以及算法设计的爆炸性增量问题,使读者体验算法的奥妙。 第2~7章介绍经典算法的设计策略、实战演练、算法分析及优化拓展,分别讲解贪心算法、分治算法、动态规划、回溯https://download.eeworld.com.cn/detail/%E6%8A%9B%E7%A0%96%E5%BC%95%E7%8E%89/630523
6.趣学算法.pdf陈小玉2017年版人民邮电出版社趣学算法.pdf-陈小玉-2017年版-人民邮电出版社 605页内容提供方:人民邮电出版社 大小:65.21 MB 字数:0 发布时间:2020-12-18发布于四川 浏览人气:1356 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元) 作者:陈小玉 出版社:人民邮电出版社 出版时间:2017-08-01https://max.book118.com/html/2020/1216/7036013003003032.shtm
7.趣学算法趣学算法 作者:陈小玉 ISBN:9787115459572 出版社:人民邮电出版社 出版年:2017 趣题学算法 作者:徐子珊 ISBN:9787115442871 出版社:人民邮电出版社 出版年:2017 趣学Python算法100例 作者:刘河飞 ISBN:9787111665984 出版社:机械工业出版社 出版年:2020 趣学Python编程 作者:布里格斯 ISBN:9787115335951 出版社:人民https://www.las.ac.cn/front/book/detail?id=2cb7ed901e50b8f45e12ff127500de96
8.趣学算法(第二版)读书笔记2趣学算法第二版pdf算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算法的理解,同时吸收他人的奇思妙想,一起见证技术er的成长~ 文章目录 一棋盘的麦子 神奇的兔子数列 https://blog.csdn.net/qq_43406895/article/details/127366131
9.趣学算法pdf,mobi,epub,txt,百度云盘百度网盘免费下载电子书本书从算法之美娓娓道来,没有高深的原理,也没有枯燥的公式,通过趣味故事引出算法问题,包含50多个实例及完美图解,结合学生提问,分析算法本质,并给出代码实现的详细过程和运行结果。 本书的特色和价值: (1)实例丰富,通俗易懂 (2)完美图解,简单有趣 (3)深入浅出,透析本质 https://read678.com/JdBook/index/2582
10.趣学算法第2版前言剖析前言阅读计划 -> 《趣学算法-第2版》 前言剖析:阅读一本书,最首先要做的一件事是阅读前言。 如下的相关描述将会分条关键词的方式呈现,类似于进一步的提炼,此时的出发点有两个:第一,个人实践的视角;第二,因为是主观阅读表达,所以会添加自己方法论体系下的蒙版,也正是在这一层蒙版之上,我作为一个普通读者看到https://www.jianshu.com/p/ee3a5aac0a80
11.《趣学算法》(陈小玉)简介书评在线阅读算法圣经新版算法谜题算法帝国啊哈算法算法的乐趣算法图解枕边算法书文本上的算法算法小时代我的第一本算法书算法详解卷1趣学算法趣学数据结构Python数据结构与算法分析数据结构和算法枕边算法书新版第一本算法书新版数据结构与算法之美 人民邮电出版社当当自营 http://product.dangdang.com/25139435.html
12.《趣学Python算法100例》(刘河飞.闫凯峰)摘要书评试读机械工业出版社京东自营官方旗舰店 趣学Python算法100例 刘河飞.闫凯峰著 京东价 ¥ 促销 展开促销https://item.jd.com/12995156.html
13.数据结构与算法365天特训营因为没系统学过算法导致稍有逻辑的业务代码根本没有思路而严重限制了职业发展? 非科班半道出家? 在校期间因为水过了算法课而后悔? 面试考算法却怎么都过不了? 在校生想参加竞赛苦于没有人教学、指导、答疑? 都没关系,现在机会来了! 我们与《趣学算法》作者共同设计了数据结构与算法特训营! 都有哪些服务?直播+https://mici.jiqishidai.com/site/course_introduction?id=11
14.打开算法和数据结构的两扇门,这样程序的灵魂和骨架就都有了2、趣学算法 选择这本书的六大理由:(1)实例丰富,通俗易懂。从有趣的故事引入算法,从简单到复杂,使读者从实例中体会算法设计思想。实例讲解通俗易懂,让读者获得最大程度的启发,锻炼分析问题和解决问题的能力。 (2)完美图解,简单有趣。结合大量完美绘图,对算法进行分解剖析,使复杂难懂的问题变得简单有趣,给读者带https://cloud.tencent.com/developer/article/1590298
15.趣学数据结构(10大模块32项要点讲授)共36课时趣学数据结构(10大模块、32项要点讲授) 学习有效存储数据的方法 处理具有复杂关系的数据 提高算法效率 325人学习 初级36课时2020/09/06更新 独家 ¥129.00 销量榜 更多 1 ETL之PDI/Kettle培训实战教程-57个案例(数据迁移、抽取同步、转换加载) 5.0风哥https://edu.51cto.com/course/24539.html
16.一年级趣味数学教案(通用11篇)3、进一步体会加法的意义,感受数的运算与生活的密切联系,提高运用所学知识解决有关的简单实际问题的能力。 教学重难点 探索并掌握两位数加一位数的进位加法的计算方法,体会计算方法的多样性。 理解不同算法的`算理,尤其是满十进一的运算规则。 教学准备: https://www.fwsir.com/jiaoan/html/jiaoan_20230114102723_2243966.html
17.和Vicky一起学习Scratch系列之二十递归算法上一期,我们学习了一个有趣的数学概念 —— 斐波那契数列,并使用 Scratch 绘制了一条斐波那契螺旋线。 今天,我们将开启算法王国的大门,学习一种很有趣的算法 —— 递归,并使用这个算法创作一个小的作品。 再谈斐波那契数列 上一期中,我们了解了什么是斐波那契数列,这个数列的前几项是这样的: https://www.chuelebos.com/blog/scratch/learn_scratch_with_vicky-20_recursive_algorithm.html
18.资料算法图解:像小说一样有趣的算法入门书雷峰网导语:本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。 下载地址:https://www.yanxishe.com/resourceDetail/950?from=leiphonecolumn_res0630pm 内容简介 ··· 本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地https://www.leiphone.com/category/ai/QMDY1TrdxcfZ77B5.html
19.“编”玩边学:Scratch趣味编程进阶——妙趣横生的数学和算法epub出版社: 清华大学出版社 ISBN:9787302495604 版次:1 商品编码:12354790 包装:平装 开本:16开 出版时间:2018-04-01 用纸:胶版纸 页数:161 字数:246000 “编”玩边学:Scratch趣味编程进阶——妙趣横生的数学和算法 epub pdf mobi txt 电子书 下载 2024 类似图书 点击查看全场最低价 https://book.tinynews.org/books/12354790
20.程序员书籍推荐:趣学算法+趣学数据结构趣学算法 第1章 算法之美 1 1.1 打开算法之门 2 1.2 妙不可言—算法复杂性 2 1.3 美不胜收—魔鬼序列 9 1.4 灵魂之交—马克思手稿中的数学题 16 1.5 算法学习瓶颈 21 1.6 你怕什么 22 第2章 贪心算法 24 2.1 人之初,性本贪 25 2.1.1 贪心本质 25 2.1.2 贪亦有道 26 2.1.3https://www.nowcoder.com/discuss/532864
21.孩子逻辑混乱是数学不好的根本原因30本书帮孩子建立数理逻辑本书揭开趣味游戏、艺术设计和日常生活中的数学密码,通过新颖话题和精美图示展现算术与几何中隐藏的妙趣,从简单的数学原理走入算法的精彩世界,展现算法破解数学谜题的无穷威力。本书适合所有数学爱好者阅读。 适合10—13岁孩子的经典书籍 13、中国儿童数学百科全书 http://parents.youthmba.com/archives/39300
22.人教版三年级数学教案(精选20篇)2、经历探索两位数口算方法的过程,体会算法的多样化。 3、增强学生讲所学知识应用于生活的意识及创新意识。 4、培养学生的口算能力、解决问题的能力。教学重点: 学会两位数减两位数的口算方法。 教学难点: 培养学生的计算能力以及解决问题的能力。 教学步骤: https://www.unjs.com/jiaoan/shuxue/20230216082019_6453700.html
23.幂次学院:数据结构与算法365天刷题特训营本套课程由幂次学院出品:数据结构与算法365天刷题特训营,官方售价7999元,本套课程由《趣学算法》作者陈小玉老师主讲。如果你想提升自己的核心竞争力!《趣学算法》作者365天带你系统学习数据结构与算法。拒绝做码农,提升核心竞争力,升职加薪轻松过面试!学习编程真正的核心!本套课程共31章完整视频+相关课件,目前更新https://www.fjha.net/4281.html