《案例 基于枚举算法的问题解决.docx》由会员分享,可在线阅读,更多相关《案例 基于枚举算法的问题解决.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、案例基于枚举算法的问题解决(设计:蒋园园)1. 课程标准要求掌握一种程序设计语言的基本知识,使用程序设计语言实现简单算法。通过解决实际问题,体验程序设计的基本流程,感受算法的效率,掌握程序调试和运行的方法。2. 教学目标通过“票据中模糊数字推断”情境,分析数字推断的过程,理解枚举算法的基本原理。(计算思维)通过“判断一个数是不是素数”任务,了解枚举算法求解问题的基本过程,能用流程图描述该问题求解的算法,能编写程序并调试运行,实现问题求解。(计算思维)体验枚举算法的执行效率,认识优化算法的必要性。(计算思维)通过与生活实例的结合运用,学会使用枚举算法解决生活中的实际问题,提高信息安全意识。(信息
2、社会责任)3. 学业要求利用程序设计语言实现简单算法,解决实际问题。4. 教学对象分析本节课的授课对象是高中一年级的学生,他们已经具有一定的问题解决和规划设计能力,而且乐于动手操作,勇于探索。通过前面课程的学习,学生已经理解了算法及其特征,能用流程图描述问题求解的算法;掌握了Python语言的基本知识,能进行简单的程序编写。但是还缺乏对利用程序解决实际问题过程的系统化梳理,对常用的典型算法(如枚举算法)缺乏深入的理解。5. 教学重点及难点教学重点:理解枚举算法的核心思想和典型特征;能结合实际问题,编写程序实现枚举算法并调试运行,解决问题。教学难点:感受不同算法的执行效率,体验算法优化在问题解决
3、中的价值。6. 教学方法与教学手段教学方法:讲授法、任务驱动法、对照实验法和合作探究法(见表2.4-3)。表2.4-3 讲授法、任务驱动法、对照实验法和合作探究法教学方法实 例讲授法通过“票据中模糊数字推断”问题导入,讲授枚举算法的基本原理任务驱动法以“判断一个数是不是素数”为主要任务,引导学生在枚举算法思想的指导下进行算法分析、程序编写与调试对照实验法运用对照实验法,比较“寻找1 000以内的所有素数”的两个程序的运行效率,认识算法优化的重要性合作探究法通过小组合作“密码解密”的任务,体会枚举算法思想在实际生活中的运用,培养学生的计算思维软硬件资源:网络机房、电子白板、教学课件、希沃白板软件
4、。7. 教学过程设计教学环节教学内容学生活动设计意图情境导入引入枚举算法教师活动:课堂开始创设情境,引入票据中模糊数字推断问题。一张票据上有一个4 位数字组成的编号。甲说:数字编号的前两位数字相同, 但都不是零;乙说:数字编号的后两位数字是相同的,但与前两位不同;丙说:数字编号是一个整数的二次方。试根据以上线索推断出编号观察思考以实际生活场景作为突破口,引出本节课的主题枚举算法,激发学生的学习兴趣数字解密初识枚举算法活动1:分析问题(图1)教师活动:引导学生梳理推断的思路。师生互动:完成问题的分析。图1 分析问题示例根据问题引领,自主思考 本环节以实际生活场景作为突破口,学生通过体验推断模糊数
5、字的实际问题,认识枚举算法,进而总结出枚举算法的三要素,突破本节课的第一个教学重点枚举算法设计的基本原理数字解密初识枚举算法活动2:设计算法教师活动:引导学生进行算法分析。根据问题分析,只要一一列举出4位数字AABB中A与B的所有可能组合,保证AB且A0,再验证二次方根问题,就可以得到问题的解。师生互动:完成算法流程图。活动3:梳理归纳师生互动:分析该问题解决算法的核心思想枚举算法。教师强调该算法的基本特征:枚举对象、枚举范围和验证条件。活动4:程序实现教师演示:打开程序文件,分析对应算法的程序语句。运行程序,体会利用计算机程序实现枚举算法的优势1.观察与思考,完成算法流程图,总结枚举算法的基
6、本原理。2.观察程序,体会用计算机程序解决问题的优势本环节以实际生活场景作为突破口,学生通过体验推断模糊数字的实际问题,认识枚举算法,进而总结出枚举算法的三要素,突破本节课的第一个教学重点枚举算法设计的基本原理素数探究深窥枚举算法探究任务: 判断一个数是不是素数教师提出任务,小组合作进行任务分析,并交流。(1)已知条件:素数的定义(只有“1”和它本身两个因数的数)。(2)求解目标:判断这个数是不是素数。(3)求解方法:逐一(强调不遗漏且不重复)判断(验证条件)。活动1:算法分析理解枚举算法进行算法流程图分析,完成自主探究任务绘制流程图(图2),理解枚举算法完成活动1(可以借助学案和微课),并展
7、示通过任务驱动,自主分析枚举算法的应用,理解枚举算法的基本原理,培养计算思维图2 “判断一个数是素数”流程图半成品素数探究深窥枚举算法师生互动:师生在黑板上借助流程图,共同梳理判断一个数是不是素数的过程中的三要素:在确定枚举对象后,最重要的是确定枚举范围和验证条件。活动2:编写程序实现枚举算法学生根据流程图编写程序,并调试运行,得到结果。(选出一位同学在电子白板上操作)教师活动:利用电子白板对学生任务进行总结与评价。活动3:延伸思考1 000以内的素数查找提出思考问题:我们已经成功利用程序实现了判断一个数是不是素数。如果需要查找1 000以内的所有素数,哪位同学能说一下自己的思路?师生交流:这
8、是对1 000个数的“大”枚举,逐一列举出其中的每一个数,判断是否为素数。所以,可以将前面判断素数的程序代码作为这个问题的判断条件。展示最后完善的流程图,师生修改程序,运行求解1.展示程序。2.思考问题,完善流程图和程序,展示通过编写程序、运行程序、调试程序三个环节,体会利用计算机程序实现枚举算法的全过程实验对比感受算法效率提出问题:借助计算机的高速运算能力,可以利用枚举算法帮助我们解决这一问题,比人工查找方便很多。但是,大家有没有想过,如果数据量太大,计算机会不会“累”?师生归纳:计算机虽然不“累”,但如果数据量太大,会影响速度,因此需要考虑算法效率。算法效率指算法执行的时间,即程序在计算机
9、上运行时所消耗的时间思考回答问题素数问题升级,强化对枚举算法的应用。本环节是突破本节课的教学难点:感受不同算法的执行效率,体验算法优化在问题解决中的价值。通过学生自己的对比实验,直观地体验不同的枚举算法具有不同执行效率,认识优化算法的必要性,培养学生系统化的计算思维以及创新能力展示任务:给出解决“寻找1 000以内的所有素数”问题的两种算法的对比程序,如表1所示, 以两个同学为一组进行关键代码,运行两段程序,从枚举对象、枚举范围和验证条件等方面分析哪种算法更好?好在哪里?填写“ 两种方案比较”表,如表2所示。展示学生任务完成情况,并总结:方案2运行速度更快,效率更高,原因是方案2的程序缩小了枚
10、举范围,进而减少了逐一验证的次数,提高了程序的运算效率,较方案1的算法更优化完成对比实验并认识到算法效率的重要性实验对比感受算法效率表1 两种方案的关键代码方案1的关键代码 方案2的关键代码 k = 1for n in range(2, 1000): for j in range(2, n): if n % j = 0: k = 0 if k = 1: print(n) k = 1 import mathk = 1for n in range(2, 1000): m = math.ceil(math.sqrt(n) + 1 if n = 2: print(n) for j in range(2
11、, n): if n % j = 0: k = 0 break if k = 1: print(n) k = 1 表2 两种方案比较比较项目 方案1 方案2 枚举对象 枚举范围 验证条件 情感升华总结枚举算法1. 课堂回顾与总结。枚举算法思想在生活中解决问题的适用情况及特点: 运算量大; 求解数量有限; 所有的可能情况都符合一定的规则。2. 枚举的应用与延伸。枚举算法是计算机解决问题的基本算法,在生活中有广泛的应用。例如,有的系统设计6位阿拉伯数字作为密码,6位数字所有的排列组合共有1 000 000种,这就意味着最多只需尝试一百万次就可破解密码,对计算机来说这是一个非常小的值。这就是绝大多数系统对用户设置密码验证次数限制的原因,一旦超过限值,用户账户就会被锁定。提出问题:如何保护自己的密码安全?教师展示保护密码安全的技术(如指纹验证、图片验证等),帮助学生建立信息安全意识。延伸:思考枚举算法还有哪些应用回顾学习过程,交流密码设置安全性问题, 了解枚举算法的更多应用,拓展思路对枚举算法的应用进行情感升华,帮助学生建立正确的信息社会责任和信息保护意识