高中二年级信息技术算法效率迭代与递归复习课教学设计_第1页
高中二年级信息技术算法效率迭代与递归复习课教学设计_第2页
高中二年级信息技术算法效率迭代与递归复习课教学设计_第3页
高中二年级信息技术算法效率迭代与递归复习课教学设计_第4页
高中二年级信息技术算法效率迭代与递归复习课教学设计_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

高中二年级信息技术算法效率迭代与递归复习课教学设计一、教学背景与学情诊断本课面向高中二年级选择性必修课程的学生,对应《数据与计算》模块之后《算法与数据结构》部分的第五章第一讲。学生已经完成必修课程中算法概念、流程图描述、三种基本结构以及Python语言基础的学习,能够读懂并修改不超过三十行的程序,对顺序查找、简单排序有直接经验。但从历次课堂观察与作业批改看,学生普遍存在三个断点:其一,知道程序能跑,却说不清它跑得快还是慢,把“算出结果”当作终点,缺乏对算法效率的度量意识;其二,能默写循环结构,遇到“前一步决定后一步”的问题时,习惯套用for或while的模板,不理解迭代思维的来历;其三,把递归当成“函数调用自己”的怪招,能背诵阶乘的例子,面对汉诺塔、折半查找的递归表述时无法还原思维过程,更谈不上比较递归与迭代的取舍。学业水平考试对该部分的要求已经从“读懂给定程序”升级为“在给定情境中选择合适的方法说明其效率特征”,近三年的合格性考试与选考试题中,时间复杂度的定性判断、迭代与递归的相互改写、递归执行过程的追踪三类题目稳定出现。本课定位为复习课,但不能上成习题讲评课。复习课的价值在于把散落在必修与选择性必修中的知识碎片重新熔铸成一个认知框架:以“效率”为标尺,以“迭代与递归”为两条腿,让学生获得面对陌生问题时自主选择算法策略的能力。二、教学目标的确立知识维度:学生能用自己的语言解释算法效率的两条度量线索——时间代价与空间代价;能针对顺序查找、折半查找、冒泡排序等典型算法,数出基本操作次数与问题规模的增长关系,区分常数、线性、对数、平方级别的增长态势;能准确陈述迭代与递归各自的结构特征、适用情境及相互转换的条件。能力维度:面对一个具体问题,学生能同时给出迭代与递归两种实现思路,并从可读性、执行开销、栈空间占用三个角度作出有理据的取舍;能通过手工模拟小规模数据,预测程序在大规模数据下的行为;能借助表格、折线图、调用树等可视化工具,把抽象的效率分析转化为可检验的证据。素养维度:在对比“一个一个找”与“对半砍着找”的过程中,体会问题分解与规模缩减的思想是人类处理复杂性的通用智慧;在递归的学习中理解“把问题交还给更小的自己”这种自相似思维的美感与风险;形成用数据说话、用实验验证的工程态度,拒绝“感觉差不多”的模糊判断。三、教学重难点及其突破策略重点是建立“问题规模—基本操作次数—增长趋势”的分析链条。学生常犯的错误是盯着代码行数判断快慢,而不是盯住随输入规模增长的那个量。突破办法是让同一问题在不同数据规模下真实运行,先获得时间数据的直觉冲击,再回头做理论计数,使效率概念从经验中生长出来,而不是从定义中空降下来。难点有两个。一是对数级效率的理解,学生对“每次砍掉一半,砍多少次到头”缺乏数感,需要借助翻字典、猜数字等身体经验搭桥。二是递归的执行机理,特别是系统栈的进入与退出过程。突破办法是要求学生手绘调用树并给每个结点标注进入时刻与返回时刻,把不可见的栈变换成纸面上可追踪的有向图,再用调试器的单步功能印证手绘结果,达成“心算—图示—机器验证”三者一致。四、教学环境与资源准备机房每位学生配一台可运行Python3的计算机,预先安装matplotlib绘图库用于绘制增长曲线。教师准备三组数据文件:包含一万、十万、一百万个整数的升序文件各一份,用于查找实验。黑板左侧保留一块“证据墙”,本课所有结论必须以便利贴形式上墙,注明提出者、依据、验证方式,下课前由学生投票决定哪些证据可以被带进后续学习。另准备纸质任务单,含折半查找的手工模拟表格、递归调用树空白模板、汉诺塔三盘实物一套。五、教学过程环节一:情境冲突——一百万个数里找一个人上课伊始,教师不给任何知识回顾,直接投影任务:有一份某市高中学生的学号列表,共一百万条,已按学号升序排列,现在需要确认某个学号是否在其中。教师请两名学生在电脑上各自完成查找,允许采用任何方法。甲同学写出顺序查找,从第一条开始逐个比对;乙同学采用折半思路,直接定位中间位置。教师运行两份程序,顺序查找耗时约零点四秒,折半查找不到千分之一秒,屏幕上的计时数字形成刺眼对比。教师追问:如果列表是一亿条,差距会是多少?学生用比例估算,顺序查找要约四十秒,折半查找依旧瞬间完成。此时板书第一个核心问题:同一个任务,为什么有人跑几十秒,有人跑一眨眼?差异不在电脑,不在语言,只在方法。教师板书“算法效率”四字,并明确本课的评判立场:从今天起,任何一个算法方案在你笔下诞生时,必须附带一句“它的代价是什么”,只说“能算”的答案一律视为半成品。环节二:从计时到计数——建立效率的度量语言教师指出,秒表测出的时间受机器、语言、数据分布影响,搬到另一台电脑就变了,因此需要一把不依赖具体机器的尺子。这把尺子就是“基本操作的执行次数与问题规模之间的函数关系”。以顺序查找为例,师生共同在代码中为比较语句计数:列表有n个元素,最坏情况下要做n次比较,记为T(n)=n,称它为线性增长。再看折半查找:每比较一次,候选区间减半,从n到n/2到n/4直到1,比较次数是“2的几次方等于n”的答案,即log以2为底的n。一百万的数据,log₂n约等于20,这就是为什么瞬间给出结果。为让学生获得身体经验,教师组织“猜价格”游戏:教师心里想好一个1到1000之间的整数,学生提问只能得到“高了或低了”的回答。几轮下来,学生自发采用对半策略,十次之内必中。教师顺势把游戏过程画成一棵倒立的判定树,树的深度就是次数,log₂1000不足10,身体记住了对数。随后引入增长趋势的图像。学生动手用Python生成n从1到1万的四条曲线:常数10、线性n、n的平方、对数log₂n,观察它们在同一坐标系下的命运。当规模小时,n平方似乎还能忍受;规模上万后,平方曲线陡然甩开其余所有曲线。教师强调一个朴素结论:评价算法,看的是规模膨胀时的增长姿态,而不是小规模时的一城一池。平方级别的算法在数据爆炸的时代等于作废。环节三:迭代——在循环中步步逼近有了效率标尺,本课第一条方法主线登场。教师给出定义的工作版本:迭代是借助循环结构,利用变量的旧值递推出新值,让答案一轮一轮地向前滚动。它的三要素是初始状态、推进规则、终止条件,三者缺一,迭代即失控。任务一:计算1到n的累加和。学生几乎本能地写出循环累加。教师追问:这里的旧值是什么,新值是什么,何时停止?引导学生把模糊的“循环”拆解为可陈述的三要素,并指出累加和的迭代是线性时间、常数空间——无论n多大,只需要一个累加器变量,空间不随规模增长,这是迭代最迷人的品质。任务二:斐波那契数列第n项。学生回忆必修内容,用两个变量a、b滚动更新:a,b=b,a+b。教师要求把每一步的两个变量值列表打印,学生看到一对变量如何像接力棒一样把状态传递下去,n步到达终点。此时教师埋下伏笔:这个问题稍后会被另一种方式重新表达,那种方式更贴近定义,却暗藏代价。任务三:折半查找的迭代实现。学生结合猜价格游戏,写出左右边界指针low与high,循环中计算中点mid,依据比较结果收缩边界,直到low超过high。教师组织学生互查三要素:初始态是整个区间,推进规则是区间减半,终止条件是区间为空。并现场计数:循环体每轮砍掉一半,轮数是log₂n级别,与环节二的理论计算互为印证。环节四:递归——把问题托付给更小的自己教师在黑板上写下斐波那契的数学定义:F(0)=0,F(1)=1,F(n)=F(n1)+F(n2)。教师说:数学定义本身就是一个程序,我们几乎不需要翻译。学生写出递归函数:若n小于2直接返回n,否则返回两项递归调用之和。代码短得出乎意料,与迭代版本形成鲜明对照。短,不等于便宜。教师要求各组手绘F(5)的调用树:根结点F(5)分出F(4)与F(3),层层向下,直到触底F(1)、F(0)。学生数出完整的树有15个结点,而F(3)被计算了两次,F(2)被计算了三次。教师抛出问题:当n是50时,这棵树有多少结点?学生估算后意识到结点数随指数膨胀,约为2的n次方量级,这就是为什么递归版斐波那契算到第40项就开始明显卡顿。教师在此澄清递归的本质结构:每一次递归调用,系统都在栈上为这次调用保存现场——参数、局部变量、返回地址;到达基例(递归出口)后逐层返回,现场依次弹出。递归的深度受栈空间限制,Python默认约一千层,超过即崩溃。学生用sys模块查看当前递归深度上限,获得对“系统栈”的具体感知。那么递归的价值何在?教师展示折半查找的递归版本,与迭代版本并排。递归版只有四五行,结构分明地与“区间减半”同构;再展示汉诺塔问题,请学生先尝试用迭代方式心算三层的移动方案。教室陷入沉思——汉诺塔的迭代写法繁琐晦涩,而递归表述只有三句:把上面n1层挪到辅助柱,把最大盘挪到目标柱,把n1层挪回来。学生体认到:当问题天然具有自相似结构——树形遍历、分治策略、嵌套枚举——递归是思维的自然延伸,硬改成迭代等于把清晰的思路翻译成绕口令。环节五:正面对峙——迭代与递归的取舍尺规教师组织微型辩论,辩题是“求阶乘,迭代与递归谁更好”。各组先独立给出立场与论据,再交叉质询。达成的共识被记录上墙:一,时间代价相当时,优先迭代。阶乘的两种写法都是线性时间,但递归每层调用有栈帧开销,常数因子更大,且有爆栈风险;迭代仅用常数空间,稳。二,问题结构与递归同构时,优先递归。树的先序遍历、归并排序、快速排序、汉诺塔,递归版本几十行内清晰可读,迭代版本需要手工模拟栈,代码臃肿且易错。可读性就是可维护性,可维护性也是成本。三,存在重复子问题时,裸递归是陷阱。斐波那契的指数爆炸并非递归的罪过,而是重复计算的罪过;引入记忆化(把算过的结果存入字典)后,递归版斐波那契降为线性时间,与迭代平起平坐。学生现场为递归版加装记忆化字典,n等于50时毫秒级返回,与之前的卡顿形成第二次冲击。四,递归深度可能触达规模本身时,必须警惕。折半查找递归深度仅log₂n,百万规模不过二十层,安全;而“对链表从头到尾递归处理”深度就是n,百万规模必炸,应改迭代。教师总结取舍的思维顺序:先问问题是否有自相似结构,再问递归中有无重复子问题,再问递归深度是否可控,三个答案都有利时才让递归上场;否则迭代是天职。这条决策链被学生记为“三问定去留”。环节六:综合实战——一间机房里的算法鉴定所学生分组领取三类真实任务,每组完成后向全班答辩,接受质询。任务A:给定十万条无序成绩数据,统计是否存在某对分数之和恰为200。甲组写出双重循环逐一配对,教师请他们估算操作次数:十万的平方是一百亿,课上根本跑不完。乙组提出改进:先排序再用双指针从两端夹逼,排序约n乘log₂n,夹逼为线性,总计仍是n乘log₂n量级,秒级完成。全班直观看到,算法的重新设计可以把“不可能”变成“眨眼之间”,这不是优化措辞,而是更换增长级别。任务B:把折半查找的迭代版改写为递归版,再改回来,并证明两者等价。学生在改写中体会:递归参数low与high正好是迭代里的边界变量,基例对应循环终止条件,函数尾部调用对应循环体的下一轮。教师点明理论事实:任何递归都可借助显式栈改写为迭代,任何迭代都可包装成递归,二者表达能力等价,差别全在代价与可读性。任务C:汉诺塔四层,先手工推演移动序列,再运行递归程序核对步数,验证2的n次方减1的规律。学生发现四层需15步,五层31步,推出n层的一般公式,并用数学归纳的眼光口头论证:挪动n层等价于两次挪动n1层加一步,递推式S(n)=2S(n1)+1,展开即2ⁿ1。教师指出,这个递推式本身就是对递归程序开销的精确描述——读递归程序,就是读一个递推方程;解这个方程,就是给出算法的时间复杂度。环节七:课堂小结与认知重构临近下课,师生共同回望证据墙,把所有便利贴归拢为三层认识。底层是度量:算法的快慢用基本操作次数关于问题规模的增长趋势来刻画,常数、对数、线性、线性对数、平方、指数,是六级台阶,台阶之间是质的差别。任何效率结论必须能回答“n翻倍时代价翻几倍”。中层是方法:迭代以状态滚动为纲,省空间、稳如山;递归以自我规约为纲,贴结构、省心智。二者表达能力等价,代价模型不同,取舍的判据是结构匹配度、重复子问题、深度上限三问。顶层是态度:先想明白再动手,先估算代价再运行验证,让数据为直觉背书。教师布置课后任务:在现实世界中找一个你反复在做的事情——整理错题、背英语单词、规划复习进度——尝试描述它的“算法”,估算它的代价,并给出一种迭代式或递归式的改进方案,下节课用三分钟讲演。六、板书设计主板书区域从左至右分三栏。左栏:效率度量,自上而下写出六级增长阶梯,配猜数字游戏的判定树简图。中栏:迭代,三要素——初始、推进、终止,附斐波那契滚动更新的变量接力示意与折半查找指针区间图。右栏:递归,画F(5)调用树的骨架,标注栈的进入与返回箭头,下方写“三问定去留”。黑板下沿留一行,抄录本课的核心句:能算出来,只是及格线;算得明白,才是信息技术课的目标。七、作业与分层要求基础层:完成三题。其一,指出冒泡排序的最坏比较次数并说明增长级别;其二,把求最大公约数的辗转相除法从递归版改写为迭代版;其三,手工画出折半查找在包含15个元素的有序表中查找某值的完整过程。提高层:研究归并排序,写出其递归伪代码,画出对八元素数组的分治过程,并推导其时间代价满足T(n)=2T(n/2)+kn,展开说明它落在哪一级台阶。学有余力的学生查阅Python的functools.lru_cache装饰器,用它重写斐波那契递归,提交一行代码与运行截图。挑战层:思考“快速排序平均n

温馨提示

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

评论

0/150

提交评论