资源简介 对分查找算法教学设计 教学目标 知识与技能:理解对分查找的概念和特点,通过分步解析获取对分查找的解题结构,初步掌握对分查找算法的程序实现。 过程与方法:通过分析多种不同的情况,逐步归纳对分查找的基本思想和方法, 在不断推进中明确对分查找算法,提升计算思维。 情感态度与价值观:1.通过实践体验科学解题的重要性,增强效率意识,提升信息意识素养,感受对分查找算法魅力。 2.掌握相关的数字化学习系统和学习工具,并运用其从事自主学习 学情分析 学生应该已经掌握程序设计的基本思想,掌握赋值语句、选择语句、循环语句的基本用法和VB基本操作,这节课学生可能会遇到的最大问题是:如何归纳总结对分查找解决不同情况问题的一般规律,鉴于此,在教学中要积极引导学生采取分解问题、归纳问题等学习策略。 重点难点 归纳总结对分查找解决不同情况问题的一般规律,分类讨论对分查找key与d(m)三种数量关系,对应修改范围 教学策略: 1、教学线索:回顾对分查找意义---巩固对分查找原理--- 分解对分查找过程---归纳对分查找考点---实践解决问题。 2、学习线索:分解问题---归纳问题---实践提升,在三个阶段的不断推进中明确对分查找算法,提升计算思维。 教学过程 教学步骤一:前情回顾 1.对分查找算法的实际意义:对分查找的高效性。 (1)一个包含一百万个人名的电话簿中找一个名字,对分查找可以让你不超过20次就能找到指定的名字。 (2)将全国13亿人按身份证号排列后,你可在31次比较后找到这个人的信息。 设计意图:增强效率意识,提升信息意识素养 2.对分查找的基本思想: (1)前提:前提是被查找的数据必须是有序的(递增/递减) (2)基本思想: 在有序的数据序列中(一般放在数组中),首先把查找的数据与数组中间位置的元素进行比较, 若相等,则查找成功并退出查找; 否则,根据数组元素的有序性,确定数据应在数组的前半部分还是在后半部分查找; 在确定了新的查找范围后,重复进行以上比较,直到找到或未找到为止。 3. 对分查找一般过程分解(以有n个元素的递增数组为例): 1、i的初值=1,j的初值=n 2、中间数的下标m与i,j的关系是:m=Int((i+j)/2) 3、确定退出循环的条件 ①区间的二个端点 i,j必须满足的条件是i<=j ②标志变量取反值flag=true 4、若key>d(m),说明应在下半区继续查找,修改i 还是j? i=m+1 5、若key设计意图:通过分析和归纳,让学生巩固理解并掌握对分查找的方法及前提条件,为后一阶段对分查找算法的实现作好铺垫。 教学步骤二:互动热身训练(注:依据互动数据决定是否对练习进行讲解) 1.(必做)数组变量d(1)到d(8)的值依次为87、76、69、66、56、45、37、23,用“对分查找”找到“69”的过程中,依次被访问到的数据是() A.69 B.66、69 C.66、76、69 D.56、66、76、69 2.(选做)在有序单词序列"bike,cake,data,easy,feel, great,hive,mark, sweet"中,用对分查找算法找到" easy"过程中,依次被访问到的数据为 A.feel, data. easy B.great, data, easy C.bike, cake, data, easy D.feel. cake. data, easy 互动设计意图说明:课堂数据可视化的应用使课堂交互真正得以“实时实地”。 通过学生行为数据反馈可即时了解学生对某一知识点的掌握情况,从而减少师生间反馈所需的时间,促使课堂交互真正实现“实时实地”。 教学步骤三:对分查找考点分析 (一)常规考点 互动练习:1. (必做)某对分査找算法的VB程序段如下: i = 1: j = 9: n = 0 key = Val(Textl.Text) Do While i <= j n = n + 1 m = Fix((i + j) / 2) If key = d(m) Then Exit Do If key < d(m) Then j = m - 1 Else i = m + 1 查找次数 剩余搜索区间 1 N/2 2 N/2^2 3 N/2^3 … … m N/2^m Loop 数组元素d(1)到d(9)的值依次为“7,12,18,25,39,58,61,72,86”。若该程序段运行结束后,n的值为2,则key的值是 A.18或72 B. 12或61 C.39 D. 7或58 (二)搜索区间长度和查找次数 对分查找算法的最多查找次数:int(Log2N )+1 查找次数分析:(右图) 互动练习: 1. (必做)某公司的员工管理系统中有1200条员工记录(每条员工记录已按员工编号升序排序),现用对分查找法搜索一员工信息,开始搜索的记录范围为1200条,若第5次对分查找后还需继续搜索,则第6次搜索的记录范围内的记录数为( ) A.18 B.19C.37 D.75 2. (选做)有一个由4000个整数构成的顺序表,假定表中的元素已经按升序排列,采用对分查找查找一个元素,则最多需要( )次比较就能确定是否存在所查找的元素 A.11 B.12 C.13 D.14 (三)数组元素下标值的变化规律(变量跟踪法) 变量跟踪法:((师生共同讨论) 讨论并回答以下两个问题。? 问题1:当d(m)>key时,新查找的范围在哪里?i和j如何变化? 问题2:在什么情况下查找会结束?继续进行重复查找的条件是什么? 设计意图:为了让学生在教师的引导下能自我解析变量跟踪法,本题分解了问题动作,找出数组元素下标值的变化规律,从而使学生建立起对分查找算法形成的科学逻辑结构。 a(1) a(2) a(3) a(4) a(5) a(6) a(7) a(8) a(9) a(10) 1 3 4 7 11 16 19 20 27 30 写出每一次循环结束后m,i,j,p的值 对分查找核心程序 当Key=1时 开 始:m=0,i=1,j=10,p=0 第一次:m=( ),i=( ),j=( ),p=( ) 第二次:m=( ),i=( ),j=( ),p=( ) 第三次:m=( ),i=( ),j=( ),p=( ) Key = Val(Text1.Text) p=0:i = 1:j = n Do While i <= j m=(i+j)\2 If a(m) = Key Then p=m:Exit Do Else If a(m) < Key Then i=m+1 Else j=m-1 End If Loop 思考:循环结束时p=0意味着什么? 当Key=20时 开 始:m=0,i=1,j=10,p=0 第一次:m=( ),i=( ),j=( ),p=( ) 第二次:m=( ),i=( ),j=( ),p=( ) 当Key=21时 开 始:m=0,i=1,j=10,p=0 第一次:m=( ),i=( ),j=( ),p=( ) 第二次:m=( ),i=( ),j=( ),p=( ) 第三次:m=( ),i=( ),j=( ),p=( ) 互动练习: 1. (必做)某对分查找算法的VB程序段如下: i=1: j=6: n=0: f=False key=val(Text1.Text) Do while i<=j and f=False n=n+1 m=(i+j)\2 If key=d(m) then f=True If keyLoop 数组元素d(1)到d(6)的值依次为“13,18,25,30,35,59”。文本框Text1中输入33后运行该程序,运行结束后下列说法不正确的是( ) A.变量f的值为False B. 变量i的值为5 C. 变量m的值为4 D. 变量n的值为2 29051253683000 2. (选做)已知一无序数组a(下标1到n),通过引入数组b(下标1到n),使得a(b(1))≤a(b(2)) ≤a(b(3))……≤a(b(n))(示例如图所示),对这些有序数据可进行对分查找。则第一次查找时,中点位置m与中点值分别是 A. m的值是Fix((1+n)/2),中点值是 a(m) B. m的值是Fix((1+n)/2),中点值是 a(b(m)) C. m的值是Fix((b(1))+b(n))/2),中点值是 a(m) D. m的值是Fix((b(1))+b(n))/2),中点值是 a(b(m)) (四)表达式的改变和查找成功后的处理方法对结果的影响 互动练习: 1. (必做)程序如下: Randomize key = Int (Rnd*100) i = 1: j = 7 s = "" Do While i <= j m = (i + j) \ 2 If key = a(m) Then s=s+"M" : Exit Do End If If key < a(m) Then j = m – 1: s=s+“L" Else i = m + 1: s=s+“R" Loop Text1.Text =s 数组元素a(1)到a(7)的值依次为“25,36,39,42,47,66,78”,执行该程序段,文本框Text1中显示的内容是“RLR",则可以确定随机产生的Key值范围是( ) A.(25,36) B.(47,66) C.(66,78) D.(78,100) 2. (选做)已知数组元素a(1)到a(9)的值依次为19,28,37,46,55,64,73,82,91,若在 Text1中输入29,然后执行以下程序段 Key= Val(Text1.Text)\10 Text2.Text=“ “ i=1: j=9: f=False Do While i<= j And Not f m=(i+j)\2 If a(m) Mod 10= Key Then search=m f=True ElseIf a(m) Mod 10 > Key Then i=m+1 Else j=m-1 End If Text2. Text= Str(m)+Text2. Text Loop 则在执行该程序段后,Text2中示的内容是 A.5 7 8 B.55 37 28 C.82 73 55 D.8 7 5 教学步骤四:课堂小结 对分算法几个注意问题: (1)对分查找的前提:被查找数据必须是有序的。 (2)新的查找范围的确定:i=m+1 或 j=m-1 (3)数组元素下标值的变化规律 (4)表达式的改变和查找成功后的处理方法对结果的影响 (5)对分查找算法的最多查找次数 教学步骤五:课后进阶练习 数组a 为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a 中查找数据Key 的程序。实现该功能的VB 程序段如下: i = 1: j = 10 Key = Val(Text1.Text) Do While i <= j m = (i + j) \ 2 If a(m) = Key Then Exit Do If Key Mod 2 = 1 And a(m) Mod 2 = 0 Then (1) ElseIf Key Mod 2 = 0 And a(m) Mod 2 = 1 Then (2) Else (3) End If Loop If i > j Then s = "没有找到!" Else s = "位置:" + Str(m) Text2.Text = s 上述程序中方框处可选语句为: ①i = m + 1 ②j = m - 1 ③If Key < a(m) Then j = m - 1 Else i = m + 1 则(1)、(2)、(3)处语句依次是 A.①、②、③ B.①、③、② C.②、①、③ D.③、②、① 设计意图:扩充课堂内容,丰富学生知识面,通过学生自己的分析、探索,找出问题答案。 自我评价 本人课堂教学的特点是利用信息技术手段,创设数字化学习环境,将教学内容与各种技术方法连接起来,让学生在体验中分解问题、归纳问题,在实践中完成教学任务要求。课堂教学模式以学生互动探究为主教师小结为辅。教学过程中注重培养学生的“计算思维”能力,增强效率意识,提升信息意识素养。 教学反思 整节课学生参与度高。老师的主导作用和学生的主体地位得到了充分的体现。学生在师生互动、生生互助中比较好地掌握了对分查找的思想和算法实现,教学效果好。 展开更多...... 收起↑ 资源预览