内容正文:
教学单元
计算与问题解决
教学主题
非数值计算
教学目标
知识与技能
· 能够理解分治思想和递归方法;
· 能够利用递归方法设计相应程序;
· 能够基于不同场景分析编写程序。
过程与方法
· 通过在练习活动中不断将问题与大概念相结合,促进和提升问题解决能力。
情感态度价值观
· 通过在游戏中体验程序设计的乐趣和逻辑思维的严谨。
核心素养培养
能够分析问题时将其理解为数学问题,并通过合理、严谨的算法进行程序设计,提升问题解决能力和计算思维。
教学内容
二分查找;分治思想;递归思想
教学媒体
电子白板、PPT
教学过程
教学环节
教师活动
学生活动
设计意图
游戏导入
【寻找假币游戏——在100个硬币中找出伪币】
有100个硬币,其中有1个伪币,它除了质量比真币轻一点之外,没有别的区别,如何通过天平快速找到这个伪币。
大家自己查找资料并讨论。
引入二分查找
以重量判断为例,重量轻就是假币。
首先是将100个硬币分成两个50,使用天平进行衡量,然后确定伪币在比较轻的那50个里,接着再将50分成2个25,将25分成两个12和1个1,将12分成2个6,将6分成2个3,将3分成3个1,这样6次就可以找到伪币,比50次少很多。
学生讨论并说明寻找假币的关键点:
1、 如何判断假币;
2、 如何找到假币。
如何判断假币?
· 厚薄不均匀
· 色泽不光滑
· 重要不一致
如何找到假币?
· 分治思想
通过游戏让学生从问题解决中学会如何抓住问题的关键问题,解决关键问题便是解决问题。
在教师的引导下了解引入二分查找方法。激发学习兴趣。
活动探究
【知识点一、二分查找】
请总结说出如何查找单词“book”的算法。
1、从字典本的中间开始翻找,找到字母b的所在页码区域;
2、从字母b的区域中间翻找,找到o的所在页码区域;
3、重复上述翻找,直到查找到字母k。
学生尝试说明如何去查找单词,并在教师引导下总结步骤:
(1)数据排序
· 将数据有序排列:先将一个数据集进行有序排列
(2)数据分半:
· 就是将排序好的数据集切分成大致相等的两份数据集;
(3)查找数据:
· 查找的时候直接和拆分数据集中的第一个或最后一个元素进行大小比较,不满足则表示数据不存在于该数据集中,满足则说明要查找的元素存在于当前数据集中。
在前述寻找假币游戏的导入下,充分激发学生对课堂的好奇心,但是假币并不足以完全作为二分法内容的案例,利用寻找单词游戏来让学生总结步骤,并让学生体会二分法步骤。
通过数组练习法,再次实践理论知识,深化和巩固二分法的实际操作方法,并在探究学习中不断熟练掌握二分方法,为后续二分算法和程序设计打下知识基础。
经过两轮数组二分查找的练习后,学生已经能够完全进入程序设计阶段,跟随教师的引导自主总结算法结构和代码内容。
【练习】
将查找下面数组中的10
数组1: 1、5、6、9、10、20、21
数字2: 9、10、33、45、76、90、100
学生按照二分的方法,自己尝试寻找各数组的10。
数组1: 1、5、6、9、10、20、21
分别引导学生进行第一次、第n次的排序方法和结果。让学生模仿并对照,激发思维活力。
自主练习数组2: 9、10、33、45、76、90、100
由学生讨论教师引导,分析并设计出二分法的核心程序和主程序。
播放【数组二分】的结果演示视频。
核心程序:
def erfen(array,key):
left=0
right=len(array)-1
while left<=right:
mid=(left+right)//2
if array[mid]<key:
left=mid+1
elif array[mid]>key:
right=mid-1
else :
return mid
主程序:array=[9,10,33,45,76,90,100]
key=10
array_index=erfen(array,key)
print(array_index)
【知识点二、分治】
1、分治策略
分治的设计思想,是将一个难以直接解决的大问题,分割成一些较小的同类问题,各个击破,最终达到解决问题的目的。二分查找实际上就是分治策略的一种典型运用。
2、二分法
二分查找又叫折半查找,该方法主要将数列有序排列,采用跳跃式的方式查找数据。以递增数列为例,先以中点位置的元素作为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部