高中信息技术选择性必修数据与数据结构“枚举算法”教学设计_第1页
高中信息技术选择性必修数据与数据结构“枚举算法”教学设计_第2页
高中信息技术选择性必修数据与数据结构“枚举算法”教学设计_第3页
高中信息技术选择性必修数据与数据结构“枚举算法”教学设计_第4页
高中信息技术选择性必修数据与数据结构“枚举算法”教学设计_第5页
已阅读5页,还剩6页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高中信息技术选择性必修数据与数据结构“枚举算法”教学设计一、教学依据与整体设计思路本课内容出自浙教版高中信息技术选修模块《算法与程序设计》第二章第一节,枚举算法是学生继顺序结构、分支结构、循环结构之后接触的第一种真正意义上的“算法”。它承上启下:既是对循环与分支综合运用能力的检验,又为后续的解析算法、递推算法、排序与查找奠定思维基础。高中技术课程标准强调计算思维的培养,而枚举恰恰是最朴素、最具普适性的计算思维形态——不依赖巧思,依靠规程化的穷举与判定,让计算机的运算能力替代人的试探性劳动。本课以“破解密码锁”这一贴近学生生活的情境切入,以“问题—建模—程序—优化”为明线,以“穷举范围、判定条件、效率意识”为暗线组织教学。整节课设计三个梯度任务:其一为百钱买百鸡问题的完整求解,其二为水仙花数的多重枚举,其三为寻找双重幸运数字的嵌套枚举优化。三个任务分别对应“会写”“写对”“写快”三个能力层级,使学生在亲手编码、对比运行时间的过程中,真切体会枚举范围与判定条件的取舍对程序效率的决定性影响。预设授课时长为一课时四十五分钟,课型为新授与上机实践结合。教学对象为已掌握Python基础语法、能独立编写for循环与if分支的高中生。二、学情分析学生此前已经能够使用for循环遍历一个数字区间,也能用if语句实现条件判断,算术运算符与关系运算符的运用基本熟练。部分学生在数学奥赛或趣味数学中接触过类似“百钱买百鸡”的方程问题习惯用代人检验的方式手工求解,这为引入枚举概念提供了天然的认知桥梁。存在的困难主要有三。其一,学生容易把枚举理解为“一个个试”,缺乏对穷举必须“不重复、不遗漏”这一形式化要求的把握,具体表现为循环边界漏一或多一、变量之间约束关系表达错误。其二,在多重循环中,内层循环的起止范围常常凭感觉设定,不会从总量约束反推取值上界,导致程序冗余运行。其三,对“判断条件写在哪里”缺乏经验,常常把条件判断包在最内层循环的每一个角落,程序虽能运行但效率低下。教学中应把这三处预设为典型错误资源,引导学生现场生成、集中辨析。三、教学目标学生能够用自己的语言描述枚举算法的基本思想,即逐一枚举所有可能的候选解,并依据问题给定的条件逐一验证,保留满足条件的解。学生能够独立分析一个实际问题的枚举要素——明确枚举对象、确定枚举范围、写出判定条件,并将其转化为包含循环与分支结构的Python程序。学生能够通过修改循环边界、提取不变量、调整循环嵌套顺序等方式对枚举程序进行初步优化,并能结合运行时间的测量数据说明优化的依据。学生能够在任务完成过程中经历从手工试算到机器穷举的思维跃迁,体会“以算力换巧思”的计算观念,形成检查边界、验证样例的严谨编程习惯。四、教学重点与难点教学重点为枚举算法的三要素分析:枚举对象、枚举范围、判定条件,以及用for循环与if语句实现枚举的一般程序框架。教学难点为如何依据问题中的约束关系缩小枚举范围,并据此对程序进行效率优化。突破策略是让学生在两次运行中亲自感受十次循环与百万次循环的时间差异,用事实触发对效率问题的关注,再引导其回到问题本身寻找约束,避免教师直接灌输优化答案。五、教学准备机房环境预装Python3解释器与集成开发环境,教师机配置广播教学软件。课前下发学习任务单,包含三个任务的空白程序框架、变量提示与运行记录表。教师自备演示代码、秒表计时小程序以及一组脑筋急转弯性质的数字谜题。六、教学过程(一)情境导入:一把打不开的锁(约五分钟)上课伊始,教师在大屏幕展示一把三位数字密码锁的实物照片,并讲述情境:学校档案室保留了一只旧文件柜,密码为三位数字,管理员只记得三个线索,密码是一个三位数,百位是6,三个数字之和等于13,且这个数能被7整除。教师提问:如果让大家不用任何工具,一个一个地试,最坏情况下要试多少次?学生很容易回答,从600到699一共一百个,最坏要试一百次。教师顺势追问:这一百次里每一次我们在做什么同一性质的动作?引导学生归纳出“取一个数——检验它是否满足两个条件——满足就停,不满足就换下一个”。教师随即板书一个行为序列:取出候选者,对照条件,通过则留下,不通过则舍弃。教师指出,这种“逐一列举、逐一验证”的解题策略就是本课要研究的枚举算法。它不依赖任何巧妙的数学变形,依靠的是完备性与耐心,而耐心恰恰是计算机最不缺乏的品质。此处教师不急于给出概念的定义式表述,而是让学生在脑中先形成操作图景,十分钟后再由学生自己口述定义,教师只做措辞修正。(二)概念建构:枚举算法的三要素(约八分钟)教师引导学生回到刚才的锁例,把整个过程拆解为三个必须回答的问题。第一个问题:试谁?即枚举的对象是什么。这里是一个百位为6的三位整数。第二个问题:试到哪里为止?即枚举的范围。答案是600到699,共一百个且不重复不遗漏的整数。第三个问题:什么样的候选者算合格?即判定条件。这里是数字各位和为13且整除7。教师以三列板书归纳:对象、范围、条件。随后请学生打开任务单,用两分钟写出这段程序。绝大多数学生能写出以foriinrange(600,700):为骨架、内层判断i各位数字之和与i%7==0的程序。教师巡视时重点观察两类写法:一类用整除和取余拆解百位、十位、个位,一类把数字转成字符串逐位求和。教师将两种写法同时投屏,让学生评价各自的可读性,强调算法层面二者等价,选择哪一种取决于表达习惯,但循环结构与判定逻辑完全一致。在学生口述的基础上,教师总结枚举算法的形式化要点:按某种顺序列举问题的所有可能解,对每一个可能解依据给定条件进行检验,输出全部满足条件的解。程序实现上,for循环负责“列举”,if分支负责“检验”,两者构成枚举的基本骨架。此处教师特意指出一个细节:range(600,700)为什么不写成range(600,699)?借机强调Python区间前闭后开的特性,并提醒学生枚举的第一大天敌就是边界疏漏,漏一个解与多判一个解同样是错误。这一提醒为后续任务的边界检查埋下伏笔。(三)任务一:百钱买百鸡,建立完整求解流程(约十二分钟)教师呈现经典问题:公鸡五文钱一只,母鸡三文钱一只,小鸡一文钱三只,用一百文钱恰好买一百只鸡,问公鸡、母鸡、小鸡各买多少只,列出所有可行方案。教师不急于让学生敲代码,而是先组织“纸面建模”。每位学生在任务单上完成三个填空:公鸡数x的取值范围,母鸡数y的取值范围,小鸡数z如何由前两者唯一确定。学生的第一反应往往是x、y、z都从0枚举到100,三重循环共百万次检验。教师先认可这种做法的正确性,并请学生估算计算机执行一百零一万次乘加判断大约耗时多少,多数学生答不出。教师说:先让它跑起来,我们把答案交给机器,把时间留给自己观察。学生上机完成三重循环版本:三层for循环依次遍历x从0到20、y从0到33、z从0到99,并用5x+3y+z//3==100且x+y+z==100且z%3==0判定。运行后屏幕上逐行打印四种方案。教师随即提出质疑:z真的需要独立枚举吗?总数一百只是硬约束,当x和y确定后,z只能等于100xy。学生立即意识到三重循环可降为二重。教师请学生改写程序:外层x从0到20,内层y从0到33,设z=100xy,判定5x+3y+z/3==100且z%3==0。运行结果与前一版完全一致,但循环次数从一百余万降到约七百次。教师将两版程序都在开头加入time模块的计时语句,各运行十次取平均,投屏显示耗时对比。数据的悬殊让教室出现短暂的惊叹。教师此时不做总结,而是让学生用自己的话解释为什么快,最终凝练为一句话:能用等式确定的变量不要去枚举,枚举的范围越小越好。这一环节学生完成了从“试”到“选”的思维转折:枚举不是盲目地全试,而是在约束允许的前提下尽可能少试。这正是本课难点的第一次触碰。(四)任务二:水仙花数与回文素数,多重判定条件的协同(约十分钟)教师抛出第二个任务:找出所有三位水仙花数,即各位数字立方之和等于该数本身,例如153=1³+5³+3³。学生已有三要素分析的范式,迅速确定对象与范围为100到999,判定条件为a³+b³+c³==i。任务单上要求两分钟内完成并运行,得到153、370、371、407四个解。教师在此追加一个开放小问题:如果要求的是既是回文数又是素数的三位数,判定部分该怎么写?学生在原有判定侧再加一个回文判断与素数判断。教师强调:多个条件之间是逻辑与还是逻辑或,完全取决于问题的语义,写代码前必须用语言把合格标准说清楚。这是枚举算法中判定条件精确化的训练。教师再问:素数判断本身要不要从2试到i1全部除一遍?有学生提出只需试到i的平方根。教师顺势指出:枚举的思想无处不在,连判定内部也存在一个微型的枚举,而微观范围的收缩同样带来巨大的效率收益。至此,优化的意识从宏观的循环层数渗透到了微观的判定内部。(五)任务三:寻找双重幸运数字,枚举效率的正面交锋(约六分钟)教师布置本课的压轴任务:在1到100000之间找出所有满足两个条件的数,该数是7的倍数,且各位数字之和也是7的倍数。学生按经验直接写五重循环无异于灾难,多数学生能写出单层循环加两个判定的版本。运行后发现耗时尚可接受。教师再提高门槛:把范围扩大到一千万。程序运行时间明显拉长,学生直观感受到十万级与千万级枚举在纯Python下的时间代价。教师组织学生讨论:除了收缩范围,我们还能在什么环节省力?有学生提出既然要求7的倍数,不如直接以i=7k的方式步进枚举,只访问真正可能是解的数。教师高度评价这一思路:枚举的间隔也可以被约束改写。随后指出本问题还有更深的结构性规律,留作学有余力学生的课后探究:连续自然数中各位数字和对7取余呈现怎样的周期?教师在此强调:枚举算法永远以正确性为第一目标,优化是第二位的追求,绝不能为了快而漏掉解。效率上的每一次让步都必须以数学依据为担保。(六)课堂小结与框架凝练(约三分钟)教师请三名学生各用一句话总结本课。预期生成如下表述:枚举算法就是先列出所有候选,再按条件逐个检查;写枚举程序要先想清楚试什么、试到哪、合格标准是什么;能用关系缩小的范围就不要全试。教师将三句话分别标注为“思想”“框架”“效率”,并板书本课的思维导图:问题——确定枚举对象——界定枚举范围——书写判定条件——for套if编码实现——运行验证——基于约束的优化。教师最后指出:枚举是算法世界里的“笨办法”,但它是所有高级算法失效时的最后防线;理解枚举,也就理解了为什么计算机能解决人类不愿动手做的事。(七)分层作业布置基础层:统计1000以内所有的完全数,即除自身外所有约数之和等于自身的数,如6、28。提高层:四位数中,前两位数字与后两位数字分别组成的两位数的平方之和等于该四位数本身的数有哪些,例如1233。要求程序运行并记录耗时。拓展层:不用三重循环,用数学推导证明三重幸运数字问题中各位数字之和的周期性,给出一个不需遍历千万次的求解思路。七、板书设计主板书以三列式呈现:左上为枚举算法定义的一句话表述;中部为三要素——对象、范围、条件,下接程序骨架for循环配if判定;右侧为优化路径示意,标注三重循环到二重循环的演化箭头与约七百次对一百余万次的对比数据。副板书留作动态生成区,实时记录学生口述的关键词与课堂现场生成的错误样例,不改写、不擦除,让学生看到自己的思维痕迹。八、教学评价设计本课评价采取过程性评价为主。任务单中设置三级达成标记:能正确写出程序并求得正确解记为达标;能主动改写循环结构缩小枚举量记为良好;能旁征测量数据阐释优化依据记为优秀。课堂巡视时教师携带简易记录卡,对出现边界漏一、变量名误用、条件写成或等典型错误的学生做标记,课末抽取两例匿名投屏,组织全班“找茬”,把错误转化为公共的教学资源。九、教学预设与生成应对若学生在密码锁情境中答出“试一百次太慢,能不能分半查找”,教师应肯定其直觉但明确告知:二分查找依赖数据的有序性,本课研究的是候选无序时最稳妥的策略,两种思想在后续查找章节将再次相遇。若任务一中学生直接写出二重循环,教师应引导其回头补全三重循环作为对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论