《基于枚举算法的问题解决——解密唐朝诗人间的关系》教学设计
李敏 程建娜
● 教材分析
本节课选自人教-地图版《数据与计算》的第二章《算法与程序实现》,本章按照计算机解决问题的过程展开,其中第四节是在学生掌握算法与程序设计基本知识的基础上,进一步理解常见算法及其程序实现的过程,并考虑算法的效率。本节课为第四节的第2课时,主要内容为理解枚举算法,是在本章前面章节项目实施的基础上进行的,考虑到借班上课中学生的基础和课堂实施效果,我对教材内容进行了处理,删减了算法效率内容,重新设计了本节课的研究问题。
● 学情分析
当今社会,信息技术已广泛应用于社会生活的各个领域,学生习惯用技术解决问题,但他们只是被动的使用者,很少关注算法在其中所起的作用,也很少有意识地主动用技术去创新或研究问题。另外,学生从小就学习大量古诗,他们对诗人间的“关系”了解不多,但却非常感兴趣。而对于施教班级所属学校的腾冲一中的学生而言,他们之前没有接触过算法与程序,没有Python编程基础。
● 教学目标
(1)了解枚举算法求解问题的基本过程,理解其基本思想,能用流程图描述该算法。(计算思维)
(2)理解枚举算法的编程实现过程,能编写程序并调试运行实现问题求解。(计算思维、数字化学习与创新)
(3)通过项目研究,认识枚举算法在学习生活中的应用价值,理解用计算机解决问题的优势。(信息意识、信息社会责任)
● 教学重难点
教学重点:理解枚举算法思想,能用流程图描述该算法,体验用枚举思想解决问题的过程。
教学难点:编写程序实现枚举算法解决相关问题。
● 课时安排
1课时。
● 教学方法与手段
项目学习、合作探究、启发式、探究法。
● 教学准备
网络机房、教学机房、学习单以及半成品Python程序。
● 教学过程
1.项目活动热身,认识枚举算法
教师谈及现代社会通过朋友圈点赞等判断两人之间的关系,提问:“古时候如何判断两个人之间的关系呢?”
学生回答可通过书信诗词判断古时两人之间的关系,并举例说出诗人及对应的古诗。
学生观看视频,梳理盛唐几位诗人之间的关系。
教师引出本节课的项目主题和研究范围:
项目主题:解密唐朝诗人之间的关系。
研究范围:以盛唐几位诗人(如杜甫、李白、孟浩然、王维等)为例进行研究,感兴趣的学生可以拓展研究更多的唐朝诗人。
学生以小组为单位,在规定时间内查找唐诗文档中杜甫创作的提及李白的古诗,并填写在学习单中。
教师分析学生的查找过程,整理问题解决思路——需要在唐诗库中对每一首古诗进行列举并判断,引出这种解决问题的方法即为枚举算法,并提出枚举算法的两个关键点——逐一列举和逐个验证。
设计意图:本环节由学生熟识的朋友圈点赞和微博@引入古代诗人间关系的判断,问题的切入比较独特,很容易激发学生的研究兴趣,为后续项目实施奠定基础。此外,从人工枚举解决问题入手,既初步帮助学生认识枚举算法及其基本原理,又让学生感受到枚举算法在实际生活中应用的普遍性,为后续计算机枚举做好铺垫。
2.项目分析与算法设计,理解枚举算法
教师分析人工枚举的问题,引出用计算机实现问题解决。
教师对照人工枚举的过程,先确定计算机枚举的输入与输出,再分析计算机实现枚举过程的步骤,指出采用流程图的图块表示每个步骤。
教师布置学习单任务:将每个步骤连接起来,用流程图描述刚才问题解决的完整过程。(如图1)
学生补充绘制流程图。
教师展示学生的流程图,分析问题,补充流程控制线,形成完整的流程图(如图2)。
教师再次引导学生理解枚举算法解决该问题的过程。
设计意图:本环节用流程图描述计算机求解诗人关系的枚举算法,这是本节课的重点,也是本节课的难点,同时也是发展计算思维的关键。其中,通过对人工枚举过程的细化,帮助学生进一步深化对枚举算法的认识,理解算法步骤在计算机解决问题过程中的作用。最后设计得到的完整流程图,既是本节课学习的关键内容,也是后面程序实现的重要依据。
3.项目初体验,编写程序语句实现枚举算法
教师引导学生认识流程图中算法步骤所对应的关键程序语句(如图3)。考虑到学生的基础,教师给出采用Python语言编程的具体语句示范。
师:计算机如何判断古诗里面哪里是作者、题目、诗句呢?
教师以《春晓》这首古诗为例,讲授计算机用列表的数据类型表示古诗的方法(如图4)。
学生依据学习单,分组完善Python程序,查找诗人关系,并填写表格(如下表)。
教师巡视并及时发现问题,针对共性问题进行讲解。
设计意图:本环节主要是根据设计好的算法进行程序实现。考虑到学生之前没有接触过Python语句,不太了解相关程序语句及功能,因此这是本节课的第二个教学难点。为了在短时间内有效突破难点,设计了两个半成品程序,分别指向枚举算法的两个关键点,学生通过补全半成品的程序,关注枚举算法的核心实现。
4.项目实现,修改枚举算法完善程序
教师展示学生的程序运行结果并提出疑问:“杜甫提及李白的古诗为10首,但对比史料记载,杜甫提及李白的古诗为12首,这是为什么呢?”
生:很多诗人都有别称,诗人乙出现在古诗中的方式可能会以别称的方式出现。
师生确定结果遗漏的解决方案:需要加入对诗人别称的检验,应该在枚举过程中,增加一个判断检验条件。
师:如何修改枚举算法呢?
学生交流讨论并结合任务单进行思考。
师:算法完善的位置应该是A还是B?(如图5)
生:位置B。
师生共同修改完善程序,完成项目的研究。
学生围绕程序运行结果进行讨论。
师:根据表格中的数据,大家有哪些启发和结论呢?
设计意图:本环节结合對程序运行结果的问题分析,引导学生关注程序调试运行的作用,并进一步加深对算法作用的理解,在采用枚举法解决问题的过程中,验证条件至关重要。其中,对项目研究结果的讨论,再次让学生从技术学习回归到真实的问题解决中,给学生一种基于数据研究唐诗的视角,激发他们后续综合应用语文、历史等学科知识进行深入探索研究的兴趣。
5.项目总结,归纳枚举算法拓展研究视角
教师总结本节课项目研究的过程以及枚举算法的基本思想,提问:“那枚举法可以解决生活中所有的问题吗?”
学生尝试归纳枚举算法适合解决的问题的特点。
师:枚举法适用于解决求解方案数量有限、答案可以按照某种规则一一列举出来的项目。
枚举算法是最简单也是应用范围最广的一种基本算法,那你认为枚举法还可以解决生活和学习中的哪些问题呢?
学生讨论作答。
师:一起来看看下列这些应用中,哪些可以采用枚举法来解决?分析其中对应的枚举算法两要素。(如图6)
学生分析每个选项,教师引导分析两个关键点对应的内容。
师:枚举法可以完成很多项目,如导航地图中的乘车路线规划。需要注意的是,虽然用计算机实现枚举算法比较高效,但如果确定枚举范围太大,数据量会很大,同样会消耗大量运行时间,在这种情况下,我们还需要考虑算法效率,优化算法,所以也期待大家进一步进行学习。
设计意图:本环节的设计是对枚举算法的延伸和总结。一方面,引导学生思考枚举算法的适用特点;另一方面,引导学生思考在日常生活中的应用案例,帮助学生对枚举算法有一个全面的认识。