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

付费下载

下载本文档

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

文档简介

高中信息技术选修算法与程序设计二分法查找教学设计本节课面向江苏省海安高级中学高中信息技术选修“算法与程序设计”模块,定位为数据结构基础与算法思想启蒙的关键一课。学生已经经历顺序查找、枚举、循环与数组的初步学习,会写简单分支与循环,能在给定数据集中查找一个值,却常常把“能查到”误判为“会查找”。本课要完成的转向,是从逐个试错的线性动作,走向利用有序性不断舍弃无效区间的策略思维;从盯住一次比较,走向理解问题规模每轮减半的确定性收缩;从背下二分模板,走向能解释边界、能处理重复、能判断失效、能设计测试的算法证据链。二分法查找看似短小,实则集中体现计算思维中抽象、分解、评估与自动化四条主线。有序数组不是背景条件,而是算法成立的生命线;中间位置不是技巧口诀,而是把搜索区间切成可判两半的分界;循环不变量不是附属说明,而是保证答案不被丢弃的逻辑护栏。课堂若只让学生默写“取中点、比大小、移边界”,就会在重复元素、空表、单元素、越界端点、目标不存在、非整型键、近邻插入点等情境中迅速露怯。高质量教学必须把“为什么能砍半”“砍半时哪一个端点动”“停止时剩下什么”“不变量是否仍成立”置于同一张思维网中,让学生在可运行的代码、可观察的表格、可争辩的反例中建立稳固理解。学情方面,本校学生数学基础较好,能够接受单调性、区间、整数离散点等概念,但程序经验差异明显。部分学生刷题较多,记得若干模板,却习惯把正确性寄托在评测通过;部分学生能讲清道理,却在指针命名、下标语义、循环退出上频繁失足;还有一些学生面对调试输出缺乏耐心,不善于用小规模数据复现错误。基于这些差异,本课采用“现象冲突—规则发现—不变量确证—边界试压—迁移构造”的路径,既给思维强的学生留下证明与变式空间,也给基础薄弱学生提供可抓握的区间模型、追踪表和断言句。教学目标设定为四层。知识目标:说出二分查找适用前提,解释为“单调序”而非笼统“排好序”;写出在闭区间与左闭右开区间两种约定下自洽的循环结构;说明目标存在时返回下标、目标不存在时返回插入位置或失败标志的设计差异。能力目标:能根据误差范围、重复键、端点接触、空区间等情况选择low、high、mid的更新方式;能手工模拟不超过八个元素的查找并标注每轮区间;能用断言检查“被排除元素不可能等于目标”的不变量。素养目标:在比较次数、失败成本、数据规模之间建立初步量化意识;形成尊重前提、验证边界、拒绝侥幸的工程态度。价值目标:体会有序结构带来的效率并非免费获得,排序成本、维护成本与查询收益需要一并衡量。重点依据三个关键词确定:有序、收缩、守恒。有序决定方向,收缩决定速度,守恒决定正确。难点不在代码行数,而在“答案始终在[low,high]内”的信念如何贯穿每次赋值;也不在mid的求法,而在low=mid+1与high=mid1这类端点跨步为何不会跳过目标。为降低半懂风险,本课不引入递归二分作为主线,不把浮点二分前置,不探索STL或内置lower_bound的语法糖,而是坚持在裸数组、显式循环、可打印状态中完成第一次真正意义上的“折半证明”。课前准备突出轻量可操作。教师准备若干场景卡:学籍号递增表、竞赛成绩非递减表、图书索书号含重复前缀表、按时间排序的传感器日志、一组未排序名单。学生机安装同一版本运行环境,提供空白骨架与三个故障版本:其一更新写成high=mid,其二mid用(low+high)/2在语言允许时向上对齐造成死循环,其三循环条件写成low<high却在闭区间语义下漏查单元素。每组配一张八格纸带,画1、3、5、7、9、11、13、15,用可移动小夹子标识low、mid、high。技术工具仅服务于放大轨迹,不替代纸面推演。课堂导入不用宏大问题,而从一件每天都可能发生的小事切入:在全校按学号升序的体测记录表中查找20260417。教师先展示顺序查找的平均动作,开学第一页翻到中间,发现页码更大就果断丢掉前半叠。学生自然说出“不用回看前面”。追问立即停止:为什么敢丢?哪一条性质允许丢?如果成绩单没按规则排,敢不敢丢?这里不把答案直接塞给学生,而用三次快速翻页让他们感到“每次都不是在猜,而是在宣判一半区域不可能”。导入语只落在一个判断句上:二分查找不是找得快,而是排除得理直气壮。概念建构采用双表示并行。黑板上保留两个词,左边是“区间”,右边是“不变量”。教师用磁性点标出下标0到7,写下目标11。第一轮low=0,high=7,mid=⌊(0+7)/2⌋=3,值7小于11,于是0到3被排除,low变为4。此刻必须在黑板边上记录一句:当前可能区间是[4,7],已排除区域[0,3]中任意值都不可能等于11,因为已知a[3]=7<11且序列非降。第二轮mid=5,值13大于11,排除[5,7],high变为4。第三轮low=high=4,mid=4,命中。学生看到的不只是三次比较,而是区间从8到4到2到1的离散塌缩。这里安排一次短暂静默,要求每个人在便签写下:若high=mid而不是high=mid1,刚才会怎样;若low=mid而不是low=mid+1,又会怎样。静默三十秒后指名陈述,教师只改名词不改判断。这个设计针对最常见的“端点粘连”:当a[mid]已经确定不是答案,还把mid留在可能区间,就是把已经宣判无罪的元素继续关进嫌疑人名单。正确性并非来自运行结果碰巧正确,而来自被排除者永不再审。随后给两种约定以同等尊严。约定一采用闭区间:low=0,high=n1;循环条件low≤high;mid=low+⌊(highlow)/2⌋;命中返回mid;若target更大则low=mid+1,否则high=mid1;结束low>high,未找到。约定二采用左闭右开:low=0,high=n;循环条件low<high;仍用mid=low+⌊(highlow)/2⌋;target更大则low=mid+1;否则high=mid;返回前另行检验,或转作插入位置lower_bound。教学上不急于说哪一种更高级,而是要求学生给出每种约定下三个单元素用例的状态表。能讲清“high是可能的最后位置”还是“high是越界哨兵”的学生,才真正拥有选择框架的自由。整数溢出以克制方式处理。对普通高中数组规模,low+high通常安全;但教师仍展示mid=low+⌊(highlow)/2⌋,说明其先求距离再平移,避免两个下标相加越过表示范围。此处不展开语言标准,只强调一条职业习惯:在涉及两端汇合的算术里,先算差值更稳。学生把它记作“先量长度,再走到中点”,这比背术语更能迁移到后续二分答案、实数求根与并行任务划分。过程设计分为六个活动,总时长一课时四十五分钟,另留课后弹性探究。每个活动都给出教师动作、学生任务、证据产物与常见迷思,便于教研组复用时直接观察课堂纹理。活动一为冲突唤醒,用时五分钟。教师投影两张表,A表有序,B表乱序但碰巧含目标。学生在B表上用“类似二分”的直觉跳查,很快会出现一次看似成功、一次彻底错过。证据产物是一句判断:当且仅当关于键的单调关系存在,比较结果才具备排除整侧的力量。常见迷思是把“当前数据碰巧整齐”当作“结构上承诺有序”,教师用学籍系统导入导出、并发插入、成绩修正三个例子说明,算法依赖的是契约,不是眼前温顺的数据。活动二为纸带折叠,用时八分钟。每组用八格纸带执行三次查找:存在目标、小于全部、大于全部。要求把夹子移动写三列:轮次、区间、被排除理由。教师巡视时只听两类语言:是否出现“因为有序,所以这一侧不用看”;是否出现“mid已经查过,不能留在新区间”。学生产物不是U形结论,而是可核验的轨迹。对基础弱组,提供句式支架“当前答案若存在,必在____;刚被排除的是____,依据是____”。对进阶组,追加问题:若允许相邻元素差至少为2,能否排除更多?引导他们发现二分只使用序关系,不假设差值密度,从而区分必要条件与额外性质。活动三为第一版编码,用时十分钟。要求先写函数头与注释中的不变量,再写循环。建议代码形态保持朴素:intbinary_search(constinta[],intn,inttarget){intlow=0,high=n1;while(low<=high){intmid=low+(highlow)/2;if(a[mid]==target)returnmid;if(a[mid]<target)low=mid+1;elsehigh=mid1;}return1;}教师强调注释先行://不变量:若target存在,它一定在a[low..high];//high为可能右端而非哨兵。学生常见错误是把return1放进循环,把high=n与high=n1混用,把等于分支放到最后导致区间语义不清。此处用同伴互查表替代教师逐行纠错:一查条件,二查端点,三查mid求法,四查结束后断言。活动四为故障注入,用时八分钟。三组故障版本随机分发,学生不得先运行,必须预测症状,再用最小用例验证。故障A写high=mid;预测在target大于右侧中值时可能卡住或重复访问;用例[1,3]查0与查4。故障B在强转规则不合适处令mid偏上,配合low=mid形成同点循环;用例两元素最敏感。故障C闭区间语义却用low<high;单元素必漏。证据产物是一张“最小杀伤用例表”,每行只包含数组、目标、期望、实际、根因。这个环节意在改变调试姿势:不是把程序跑坏再慌,而是先想象坏,再让坏现形,再把根因压缩成一句话。活动五为重复元素讨论,用时八分钟。给出a=[2,4,4,4,6],查找4。普通二分返回的可能是中间那个4,也可能是首或尾,取决于更新细节。教师不追逐神秘稳定性,而提出三种合理需求:任一存在证据、首次出现位置、最后出现位置。学生分组选择其一,说明需要改动的不是“思想”,而是命中后的动作:找任一可立即返回;找首次应在命中后仍压缩右半,保留候选;找末次则压缩左半。对首次位置的左闭右开写法,可描述为不断维护“答案候选与尚未排除的左边界”,课后提供完整变式。课堂只确保学生理解:重复键暴露了“找到”一词的歧义,工程接口必须先定义返回承诺。活动六为小结外化,用时六分钟。黑板单向收束成四行:前提是有序;动作是取中;根据比较放逐一半;不变量守护答案。学生完成出口卡三题。其一,n=1000000在最坏情况下大约比较多少次,说明⌈log₂(n+1)⌉或⌊log₂n⌋+1与具体约定相关,数量级落在二十次。其二,为什么未排序数组先排再查不一定划算,给出查询频率与变更频率的权衡。其三,写出一个让二分失效却仍返回结果的陷阱用例。教师回收后按“前提误用、边界混淆、复杂度误读、接口含糊”四类归档,作为下节二分答案的入口诊断。教学过程的实录式展开设在教研文本中部,以便观课者还原节奏。上课铃后,教师在屏幕只放一张表与一个问题:找20260417。学生第一反应是打开查找框,教师否定自动完成,要求用肉眼与规则。纸带开始移动时,最响亮的回答往往不是正确代码,而是“前一半不用看”。教师抓住这句话追问“谁给的权利”,教室里会出现短暂停顿,这个停顿是算法的门槛。越过它,学生不再把二分看成技巧,而看成由序关系授予的排除权。在第一次板演中,教师故意把high标注成8。有学生马上指出越界,另一部分认为右开也可以。教师不急着裁决,把两套区间画成颜色不同的括号,闭区间用实心点,右开用空心圆。同一份比较指令在两套几何意义下分道扬镳,班里的分歧从记忆冲突转成语义冲突。此时教师给出规则:你可以选任意体系,但必须从一而终,并且能在第五分钟向同桌证明结束时答案没有被丢。这样处理避免把一种风格神化,也给后续阅读不同代码库留下心理弹性。编码开始前的三分钟,教师展示一个看似多余的要求:先写失败。学生写出三行,空数组返回未找到;长度一且不等返回未找到;大于最大返回未找到。这个反直觉动作让循环不再是唯一主角。正式实现时,基础较弱学生照骨架也能运行,但教师逐组追问返回1前区间是什么状态。必须听到low>high且可能区间为空,才准进入下一任务。对于把“没找到”当成异常而紧张的学生,明确说明:失败是查找算法合法输出之一,负结果是信息,不是崩溃。故障注入阶段出现一个典型课堂事件。某组预测high=mid在[1,3]查4时会死循环,实际Python风格mid向下取整而闭区间low<=high中low=mid+1已能终止,他们把另一个语言习惯误植进来。教师没有更正为“你错了”,而是要求把误差归到三个桶:取整方向、区间开闭、端点赋值。该组最后写成:当target大于所有元素时,low跨到n,循环结束;真正危险是与错误high更新叠加。这个“预测部分落空”极有价值,因为它迫使学生区分单病与合病,不让标签式经验替代具体语义。复杂度不用大段推导,而用深度尺。教师请学生从8个元素数到1个:8、4、2、1,三次多一点;再翻倍到16,仍只多一刀;到1024约十刀;到一百万约二十刀。随后抛出一个易混点:二分不是因为数组很大才快,而是因为每轮都有把握让候选规模按因子二下降;若比较本身昂贵,例如远端数据库往返,减少比较仍珍贵;若比较极便宜且只能顺序扫描硬件流,收益结构会改变。这样既不神化logn,也不贬低它,学生开始把常数、成本模型与增长阶放进同一句话。课堂中途安排一次跨学科短桥。物理小组用传感器日志按时间有序,查找某阈值首次超过;数学小组谈单调函数零点;语文小组从字典部首后按页码定位谈到索引目录。桥不长,三十秒一个,目的在破除“数组专属”的狭窄表象。教师提醒:可二分的不一定是数值数组,也可以是任何能给出单调裁决的信息源——猜年龄游戏中“是否大于”,版本故障定位中“该提交是否已坏”,实验调参中“剂量过高还是过低”。这为后续二分答案埋钩,但不提前展开判定函数构造,避免本课焦点漂移。练习系统分三级。A级保底:给定非降数组与十个目标,手算区间轨迹,写出命中或未找到;code通过空表、端点、中间、不存在四测。B级辨析:把三段几乎正确的二分改成同一闭区间标准,并解释每处端点;判断“排序后二分总比顺序优”在单次查询、千次查询、频繁插入下分别如何。C级挑战:设计一个返回插入位置的二分,使重复键中目标应插入最左侧;再构造一个非随机族,使某错误实现在学校OJ仍能全过,却在隐藏用例暴露。三级都不追求题量,追求每一题能逼出一句陈述。评价设计规避唯AC。过程分占六成,含纸带轨迹、不变量注释、最小杀伤用例、故障根因句;结果分占四成,含正确性、接口清晰、复杂度表述。量规四个等级聚焦证据:重建级能复述步骤;迁移级能解释开闭区间并在变式中自洽;批判级能构造反例识别前提破坏;创造级能把二分抽象为单调判定下的区间收缩,并提出成本权衡。课堂即时反馈不用分数轰炸,而用三色贴纸:绿色表示前提明晰,黄色表示边界需盯,红色表示不变量缺失。学生把贴纸贴在自己的代码页眉,形成可携带的修订清单。差异化支持落在三处。对读写代码吃力的学生,提供“区间卡”而非完整代码,卡上只有三空:可能区间、已排除区、依据;先会走,再会谈。对数学强的学生,要求证明循环至多⌈log₂(n+1)⌉轮,并说明与失败返回时多一次比较的关系;同时提示离散向上取整的边界不用陷入繁文。对竞赛经验学生,禁用模板变量名l、r、mid的机械组合,要求改用left、right、probe并写英文断言,去除肌肉记忆;再加任务为“同一思想手写闭区间、右开区间、首插位置三版本并保持接口文档一致”。两端都被推向同一核心:语义先于形式。板书结构坚持少而硬。左栏写前提:非降序,可比较,随机访问并非逻辑必需但影响效率。中栏画区间收缩天梯,标出low、mid、high。右栏写不变量:目标若存,必在低高之间;被查中点若不等,立即逐出;结束时可能集为空或候选唯一。底栏留一块“危险区”:未排序、端点滞留、条件错配、返回语义含混、把offbyone当运气。下课前学生合上书,只能看这四块复现算法,重建不出者说明课内还未真正过关。作业主打小而准。基础作业一:手写模拟a=[4,0,2,2,9,13]中查2、查1、查20的完整区间,标出每次排除依据。基础作业二:把课堂闭区间版本改写为左闭右开版本,仅更改必要行,附三条断言证明等价。进阶作业:实现lower_position(a,n,target),返回第一个不小于target的下标;若无则返回n;用随机对拍一千组小数组与暴力扫描比对。挑战作业:调查学校图书借阅系统中索书号是否严格唯一,写出若含重号时“定位任意一册”和“列出全部同号”的算法分工,访谈字数不限,但必须给出一条真实约束。所有作业不要求打印长报告,要求每张纸都能被同桌复算。可能的课堂风险需预判。若学生抢着背诵模板,教师立即收走投影,要求只在纸带上演示“排除权”;若学生对log畏惧,改用“每刀减半,几刀到一”的具象句;若课堂时间被故障注入吞没,保留活动一、二、三与出口卡,活动五移交课后微课;若机房网络异常,全部练习可退到纸笔和黑板磁点,算法的逻辑不依赖在线评测。若设备充裕,可用可视化插件显示区间柱,但禁止动画自动播放,必须学生每点一步先报排除区间。教学反思预设三项观察指标。第一,学生是否仍把“排好序”说成口号;若出口卡不能写出单调关系与比较方向,下一课时用五张未排序样例重做前提诊断。第二,offbyone是否被过度夸张成玄学;若学生只会数+1或1,不会参照区间定义判断,需要增设“端点是候选还是哨兵”的快问快答。第三,复杂度是否遮蔽了成本观;若人人会答二十次却无人提排序代价,则在后续排序复习中补一节“首次建立索引的成本摊销”。教研组听评课不建议统计教师讲了几分钟,而建议记录学

温馨提示

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

评论

0/150

提交评论