高中信息技术选修1二分查找算法的程序实现教学设计_第1页
高中信息技术选修1二分查找算法的程序实现教学设计_第2页
高中信息技术选修1二分查找算法的程序实现教学设计_第3页
高中信息技术选修1二分查找算法的程序实现教学设计_第4页
高中信息技术选修1二分查找算法的程序实现教学设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

高中信息技术选修1二分查找算法的程序实现教学设计一、教材定位与内容结构本节内容位于高中信息技术浙教版选修1《数据与数据结构》“数组与查找”单元,是顺序查找之后指向效率优化的关键一课。教材表面呈现的是折半比较、区间收缩、边界更新三个动作,深层承载的是有序数据前提下的algorithmicthinking:用不变量约束搜索范围,用循环条件控制终止,用中间位置划分未知区域。学生若只记住low、high、mid的写法,会在变式题中迅速失分;若能把“答案一定在未检查区间内”作为推理支点,就能解释为什么循环条件是low<=high,也能判断返回值应在何处产生。本课适合安排在高二年级,前期学生已完成Python基础语法、列表索引、for与while循环、函数封装及简单比较运算学习,已经能写出版本正确的顺序查找。学习障碍不集中在语法,而集中在三处:其一,把lower_bound口语里的“中间”误认为固定中点,忽略整数除法与下取整;其二,把high更新为mid而不是mid1,导致死循环;其三,忽视“升序”与“边界含性”之间的联动,把不同题目中的开闭区间混为一谈。教学设计需要让错误显性化,让修正发生在学生自己的循环踪迹里。二、课程标准意识与学科核心素养落点普通高中信息技术课程强调计算思维、数字化学习与创新、信息社会责任等素养的协同达成。本课不以背诵定义为目标,而以“定义可验证的搜索不变量”为思维主轴。学生应能面对一个有序列表,说明目标若存在,它只可能落在当前low与high覆盖的闭区间内;每比较一次,依据相等、偏小、偏大三种关系丢弃一半不可能区域。这样的表达不是口头技巧,而是程序正确性的最小证明。在数字化表达层面,学生把自然语言规则转写为可执行函数binary_search(a,target),再通过断言、手工样例、随机对拍验证行为。信息社会责任落在“效率不是玄学”:当数据规模从10增至1000000,顺序比较与折半比较在次数上的差异会改变系统响应体验;算法选择影响资源消耗、能耗与用户体验。课堂评价引导学生用证据说明选择,而非用“更快”这类空泛词替代推理。三、学情诊断与可观察学习起点开课前的两分钟诊断题给出升序列表a=[3,7,11,18,25,31,44]与目标31,要求学生只做纸面操作:写下每次low、high、mid、a[mid]。能稳定写出三轮的人通常已具备区间观念;把mid写成real数、把low更新为mid而非mid+1、把high保持不动的人,是后续小组互助的重点。诊断不评分,只作为分组依据,避免学生把试探误解为惩罚。教师再补一个边界问题:若target=2,循环会在哪一步结束,返回值应该是什么。正确预期是low最终越过high,函数返回1或None表示未找到。这个空区间情形决定循环条件的符号方向,课堂上要保留其讨论空间。若学生用“找完整个列表”解释失败,说明仍停留在遍历心智模型;若能说出“候选区间收缩为空”,就已摸到折半的门把手。四、教学目标的行为化表述学生能够说明二分查找适用于已排序序列,并能用反例解释打乱顺序后,丢弃一半元素的推理不再成立。给出a=[9,1,4,7],target=1时,中间值4大于1并不意味着1在右侧,这一反例足以击穿“二分可通用”的错觉。学生能够手写循环不变量:若target在a中,则target在a[low:high+1]内;每轮比较后,若a[mid]<target则low=mid+1,若a[mid]>target则high=mid1,否则返回mid。该不变量像护栏,保证程序修改时不越过正确性边缘。学生能够独立实现函数,处理目标不存在、重复元素、单个元素、空列表四类输入;能用表格跟踪low、high、mid,并计算比较次数约为对放量级。对于n个元素,最坏比较次数满足每轮规模减半,写成n,n/2,n/4,…,1,轮数k近似等于以2为底n的对数向上取整,课堂用符号⌈log₂n⌉呈现,避免把估算说成精确常数。五、重点、难点与突破路径重点是mid1与mid+1的原因,而不是公式外形。突破依赖“已检查元素必须移出候选区间”的追问:a[mid]已经比较过且不匹配,若下一轮仍把它留在low与high之间,区间可能不再缩小。把a[mid]留在区间,就像在猜数游戏里被告知“不是42”后下一轮仍猜42,听众会立即察觉荒谬;把这份荒谬迁移到代码,就能理解±1的必然性。难点是循环终止与返回值位置。突破采用双线对照:成功路径在相等时立刻returnmid;失败路径在low>high后走出循环。若错误地在循环内写elsereturn1,会在第一次不匹配就误判;若把返回1放到循环外,语义变为“候选区间耗尽仍未命中”。让学生用[1,3]查2走一遍,能看到whilelow<=high会把区间夹到空,再落到循环外返回。六、教学资源与课堂环境机房按四人异质小组编位,每人一台可运行Python的终端,小组共享一块小白板用于画区间箭头。教师准备三份材料:纸质跟踪表、含错误的半成品代码、自动对拍脚本。自动对拍脚本把student_func与朴素顺序查找在随机升序数组上比对一千次,既服务展示,也把“测试可以接近穷举小输入”的工程习惯带进课堂。课件不堆叠概念页,只保留三张可视化页面:区间尺、分支决策菱形、复杂度台阶图。区间尺用两段可移动挡板表示low与high,红色区域为已排除,绿色区域为仍可能。学生每一次猜数都推动挡板,身体动作先于符号记忆。七、教学过程总览与时间分配本课用两课时连排,合计九十钟。第一课时完成情境点燃、规则建构、手算追踪与首次编码;第二课时完成错例解剖、变式迁移、性能测量与总结迁移。两课时之间设置三分钟的“冷却回忆”,要求学生不看笔记写出循环骨架,收齐后随机投影三份,用同伴语言修订。八、情境导入:从猜价格到猜下标教师展示一个不显示数字条目的拍卖页面,只告诉学生报价单调递增,目标商品位于某个未知位置。学生提出查法,常见答案是从头看到尾。教师追问:列表长度是一百万时,逐一看是否仍然是好主意。学生自然感到成本压力,却未必能立即给出方案,此时引入“每次问中间项,利用大小关系砍掉一半”的策略。活动规则刻意收紧:教师不直接给数组,而只回答三种信息“命中、偏小、偏大”。一名学生上台猜,全班在跟踪表记录区间。第一次猜中点后,教师把不可能一侧涂灰,强调灰色区域永不再看。三轮以内区间骤缩,学生直观看到指数级收缩的力量。这个力量不是靠口号证明,而是靠区间长度从100、50、25、12的变化被砸实。九、规则建构:把口语变成不变量小组把猜数过程改写为四行规则:设定low为0,high为n1;当low不超过high时取mid为low与high和的整数一半;比较a[mid]与target;按结果移动边界或结束。教师要求每组必须补上一句“我们始终相信什么”。有组写“目标只可能在尚未涂灰的连续段里”,教师将其提升为不变量,并让全班抄进跟踪表顶部。关键追问落在整数一半。学生容易写(low+high)/2,得到浮点结果。教师用low=0,high=7演示,真实下标不能是3.5,于是引出(low+high)//2。进一步给出low=2,high=3的短区间,说明mid取2,若a[2]<target则low变为3,区间没有停在原地。这个细节为后续防止死循环奠基。十、首次编码:最小可运行版本学生独立完成函数框架:defbinary_search(a,target):内部设置low、high;whilelow<=high:计算mid;ifa[mid]==target返回mid;elifa[mid]<target移动low;else移动high;循环结束返回1。教师巡视时不替学生改错,只提问三类问题:你已经排除的元素在哪里,下一轮它们会不会回来;空区间靠什么表达;如果没找到,函数在哪一行给出承诺。第一次运行常见三类故障。其一,使用/导致TypeError或索引错误,修复为//。其二,把high赋成mid,输入[1,2]查2时死循环,教师要求学生打印跟踪表,看到low=0,high=1,mid=0,接着high=0,区间在原地呼吸。其三,未命中时在循环里提前返回1,用[1,3,5]查3首轮偏大就报错,迫使返回值搬回循环外。十一、跟踪表训练:让每一步可被审判跟踪表列含轮次、low、high、mid、a[mid]、比较结果、区间长度。学生用a=[2,5,8,12,16,23,38,56,72,91]查23,必须写出三轮:low0、high9、mid4,a[4]=16偏小,low变5;第二轮mid为7,a[7]=56偏大,high变6;第三轮mid为5,a[5]=23命中。表格迫使“我觉得在附近”变成可核验状态。失败样例同样入表。查20时,最终low越过high,候选区间为空,返回1。教师要求学生在表格底部补一句解释:没有发现不是因为没耐心,而是因为可能位置集合变空。这个句子简短,却把算法终止性与存在性证明连接起来。十二、正确性讨论:三段式归纳课堂归纳采用三段论。初始化时,候选区间覆盖全部下标,不变量成立。保持阶段,若a[mid]小于target,且序列升序,则mid及其左侧都不可能等于target,令low=mid+1后不变量仍成立;右侧对称处理。终止阶段,若返回mid,则相等已发生;若low>high,候选区间为空,结合不变量可得target不在数组中。学生先听懂,再用自己的话向同桌复述一遍。教师避免把正确性讲成权威结论,转而邀请学生找漏洞。一名学生提出重复元素时返回哪个下标不确定,教师肯定这不是缺陷而是规格问题:基础版承诺“找到任一匹配位置”,若题目要求第一次出现位置,需要改为lower_bound变体。规格先行,代码才不会在测评中含糊。十三、变式一:寻找第一个等于target的位置任务升级给出含重复值的升序数组a=[1,2,2,2,5,8],target=2,要求返回最左侧下标1。基础版可能返回2或3,不符合“第一个”。学生把相等时的立即返回改为记录ans=mid后继续向左收缩,即high=mid1;偏小仍令low=mid+1;循环结束依据ans是否存在返回答案。关键转变是相等不再终止,而是成为“候选答案仍需左证”。学生要写新不变量:答案若存在,必在[low,high]或已记录ans的左侧链条中。数组只有[2,2]时,首轮mid为0,ans=0,high变1,循环结束后返回0,边界短样例能压住侥幸运气。十四、变式二:在旋转有序数组中定位valley迁移任务给出原先升序后整体旋转的数组,如[6,7,9,1,3,5],求最小值下标。学生发现直接套用相等判断失效,因为target不再给定;可比较a[mid]与a[high]判断哪一侧仍然有序。若a[mid]>a[high],最小值在右半,low=mid+1;否则最小值在mid或左侧,high=mid。这个任务把“二分思想”从查找等值扩展到利用单调性排除不可能区域。教师控制难度,不要求所有组当堂完成该变式,只要求写出排除理由。评价关注点不在答案奇巧,而在每次收缩是否说出了“被丢弃侧不可能含最小值”的依据。能说清依据的组进入展示,说不出依据但代码碰巧通过的组回到跟踪表补证。十五、性能测量:从感觉快到量化证据学生构造长度分别为10、1000、1000000的升序列表,目标设为不存在的最右值,分别运行顺序查找和二分查找,记录大体时间与比较计数。顺序比较次数随n直线上升,二分比较次数约为⌈log₂n⌉:10对应约4,1000对应约10,1000000对应约20。课堂用台阶图展示n翻倍而二分轮数只加一,学生能读出对数增长的节制。讨论引入前提成本:二分要求有序,排序本身有代价;若只查一次且数据无序,先排序再二分未必合算。这个提醒防止形成“凡查找必二分”的机械崇拜。算法选择回到问题结构:查询频率、更新频率、内存限制、稳定性需求都会改变答案。十六、课堂评价:证据导向的三层量规第一层看运行:基础函数通过空列表、单元素、命中首尾、目标缺失四类用例。第二层看解释:学生能口述不变量并用跟踪表证明一次失败查找。第三层看迁移:面对重复元素或单调判定问题,能调整收敛方向且不破坏终止性。三层都强调可观察证据,避免用课堂活跃度冒充理解。即时反馈采用“绿黄红”卡。绿卡表示可继续挑战变式,黄卡表示能跑通但解释含混,红卡表示边界仍随机。持卡不标签学生,只决定下一站任务:绿卡做lower_bound,黄卡补两个边界追踪,红卡与同伴用区间尺重走[1,2]查2。评价成为路线分配器,而非名次宣告。十七、常见误区的正面化解误区一认为中点丢弃依赖运气,实质依赖有序性带来的方向信息。误区二把返回1当成语法尾巴,忽略它是存在性判断的出口。误区三迷信递归更高级,课堂用同一不变量展示递归版与迭代版等价,指出递归会增加调用栈开销,在Python课堂默认迭代实现更稳健。误区四把整型溢出当作本节核心。对在Python中low+high不会立刻溢出的现实作简要说明,同时提一句在固定宽度整数语言里可写low+(highlow)//2。这样既保留工程意识,又不让旁枝淹没主线。十八、板书结构与可视化锚点主板书左侧写前提:有序升序。中间画区间尺,标注low、mid、high与两块灰色排除区。右侧写三行更新:等于返回mid;偏小low=mid+1;偏大high=mid1。底部留一行不变量:若存在,则在a[low:high+1]。整节课板书不擦掉不变量,所有修改都回到这一行前对齐。副板书陈列错误码片段:high=mid、循环内elsereturn1、/代替//。每个错误旁不写生名字,只写触发样例。学生看到自己思路被匿名展示,更容易把修正视为公共财富。十九、作业设计:少题量,高覆盖基础作业要求完成binary_search并附五组测试,其中必须包括空列表与目标小于首元素。提升作业实现lower_bound并说明相等时为何继续左移。挑战作业给定日志文件按时间戳递增,要求定位某个告警时间第一次出现的行号,允许使用分页思想描述大数据下无法一次读入内存时如何在分块索引中应用折半。作业评价不看篇幅,看三个钩点:前提是否写明,边界是否闭环,失败是否返回明确信号。学生提交后可运行公共对拍,未通过者获得具体反例而非笼统扣分,下一个课间可预约两分钟面批。二十、不同学习路径的支持策略对进度快的学生,提供问题“求平方根整数部分”,即找最大x使xx<=n,引导其把判定条件单调化。对需要帮助的学生,提供半完成骨架,只空出边界更新两格,先稳住循环结构,再补返回策略。对表达强而代码弱的学生,安排担任小组证明员,把不变量讲给操作员听;对操作强而表达弱的学生,要求其用跟踪表替代口头辩解。小组内角色每二十分钟轮换:驾驶员敲代码,领航员读题,记录员填跟踪表,质疑员专找反例。轮换避免一个人包办思维,也让沉默者获得结构化入口。教师巡视优先听质疑员发言,因为那里最可能生长出真问题。二十一、两课时衔接的精细安排第一课时收束在不立即给标准答案的状态:学生带着自己代码和一个未解边界离开。第二课开始用三分钟默写循环骨架,随后投影三份典型骨架,班级共同标出会死循环的一份。旧错在新课开场复活,记忆提取强度高于教师重讲。第二课时后段安排跨学科短链:数学中的对数不是公式装饰,而是“每次减半能减几次”的计数;物理实验中查表校准若数据单调,也可用同样收缩思路减少读数次数。链接保持克制,只为说明单调性与折半排除在多学科重复出现。二十二、教学反思预设与证据回收课后回收三样东西:跟踪表、最终代码、学生写的一句“我不再犯的错”。若跟踪表显示high仍频繁更新为mid,下次导入改用更短的[1,2]反例开场;若返回值位置错误集中,后续函数教学把“循环内出口”和“循

温馨提示

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

评论

0/150

提交评论