2013教科版选修1《穷举法》ppt
- 格式:ppt
- 大小:349.50 KB
- 文档页数:70
竞赛辅导1------穷举法一、穷举法基本思想:是根据提出的问题穷举所有可能的状态,并用问题给定的条件寻找问题的解。
适用穷举的的问题需要满足下面两个条件:1) 可预先确定状态(搜索元/变量)的元素个数2)状态元素的可能值为一个连续的值域穷举算法的模式:1)搜寻问题解的可能范围:用循环或循环嵌套结构实现2)确定约束条件:3)程序的优化,以减少搜索范围和程序运行时间穷举算法的优点:1)由于穷举算法一般是现实生活问题的直译,因此比较直观,易于理解2)由于穷举算法建立在考察大量状态、甚至是穷举所有状态的基础上,所以算法正确性比较容易证明。
穷举算法的缺点:由于穷举的数据量过大,效率较低。
二、实例解析:穷举算法的一般设计过程先对问题进行直译,然后优化。
(一)、问题的“直译”:将自然语言描述的过程直接“翻译”成程序语言的实现过程(算法),找到搜索元,找到搜索元的数据范围和问题的约束条件。
例1、百鸡百钱问题:公鸡一只5文钱,母鸡一只3文钱,小鸡3只2文钱。
要求一百文钱买一百只鸡,编程计算各种鸡的具体数量。
分析:设三种鸡的数量为x,y,z ,则原问题可转化为在1=<x<100,1=<y<100,1=<z<100,范围内搜寻满足约束条件5*x + 3*y+z/3=100的x,y,z的值。
则,原问题可直接转化成的穷举算法如下:for x---1 to 100 dofor y---1 to 100 dobeginz=100-x-y;if 5*x + 3*y+z/3=100 then 输出x,y,z;end;{for}能直译的问题的一半的特点是:1)输出变量的个数确定,数据在可选范围内连续或者满足一定的递增(递减)关系2)约束条件直观,可以用解析式表达或者近似表达3)直译穷举算法时间复杂度为一个多项式。
4)数据范围较大时不适宜采用直译方法,时间耗费较大。
练习:1、求完全数:古希腊人认为因子的和等于它本身的数是一个完全数(自身因子除外),例如28的因子是1、2、4、7、14,且1+2+4+7+14=28,则28是一个完全数,编写一个程序求2-1000内的所有完全数。
程序设计竞赛系列讲座杨克昌第1讲程序设计竞赛引论第2讲穷举第3讲递推第4讲递归第5讲回溯第6讲动态规划第7讲综合训练第2讲穷举穷举是计算机程序设计引导入门的基础算法,也是在数量较小的问题求解中应用广泛的算法。
应用穷举设计可以非常简明地解决许多实际问题。
本章介绍统计求和、解方程、解不等式、求最值以及涉及素数的基础案例的穷举求解,并由整币兑零、完美综合式与和积三角形三个安全的求解说明穷举设计的改进与优化。
2.1穷举概述1. 穷举的概念穷举法又称列举法、枚举法,是蛮力策略的具体体现,是一种简单而直接地解决问题的方法。
其基本思想是逐一列举问题所涉及的所有情形,并根据问题提出的条件检验哪些是问题的解,哪些应予排除。
通常程序设计入门都是从穷举设计开始的。
今天,计算机的运算速度非常快,应用穷举设计程序可快捷地解决一般数量的许多实际应用问题。
穷举法的特点是算法设计比较简单,解的可能为有限种,一一列举问题所涉及的所有情形。
穷举法常用于解决“是否存在”或“有多少种可能”等问题。
其中许多实际应用问题靠人工推算求解是不可想象的,而应用计算机来求解,充分发挥计算机运算速度快、擅长重复操作的特点,穷举判断,快速简便。
应用穷举时应注意对问题所涉及的有限种情形须一一列举,既不能重复,又不能遗漏。
重复列举直接引发增解,影响解的准确性;而列举的遗漏可能导致问题解的遗漏。
2. 穷举的框架描述穷举通常应用循环结构来实现。
在循环体中,根据所求解的具体条件,应用选择结构实施判断筛选,求得所要求的解。
穷举法的框架描述:n=0;for(k=<区间下限>;k<=<区间上限>;k++) // 根据指定范围实施穷举if(<约束条件>) // 根据约束条件实施筛选{ printf(<满足要求的解>); // 输出满足要求的解n++; // 统计解的个数}有些问题没有明确的区间限制,可根据问题的具体实际试探性的从某个数开始,增值穷举,对每一个数作一判断,若满足条件即输出结果,结束穷举。
1、教学目标知识与技能(1)理解穷举法的概念;(2)掌握用穷举法设计算法的基本过程;(3)能使用穷举法解决生活中实际问题。
过程和方法(1)经历分析—实践—探究—归纳四个环节,理解穷举法的思路,掌握用穷举法设计算法的过程,培养探究能力。
情感态度与价值观(1)分组学习,培养学生的协作精神和竞争意识;(2)运用穷举法解决实际问题,激发学生对算法设计的学习兴趣。
2、教学重点和难点重点:(1)理解穷举法的概念;(2)掌握用穷举法设计算法的基本过程;(3)能使用穷举法解决生活中实际问题。
难点:(1)掌握用穷举法分析问题并设计算法的基本过程;3、学情分析及教材处理《穷举法》是江苏省高中信息技术教材第三章第二节的内容,本节是建立在学生已经学习了循环结构,掌握了调试程序的基本方法和解析法的基础之上,学好本节既是对循环结构的应用,又能为后续学习作强有力的铺垫。
程序设计要求学生的逻辑思维非常强,多数学生对程序设计望而生畏,理解比较困难,恰当的教学处理显得尤为重要。
所以本节课主要从以下几方面着手:(1)把教学内容与生活相联系,让知识具有“亲和力”,减少学生的畏惧感;(2)注重能力训练与问题解决相联系,激发学生攻克问题的兴趣;(3)教师引导学生,分析和分解复杂的问题,让学生逐步领悟并掌握用穷举法设计算法的思想和方法。
4、教学过程:(一)、任务驱动,层层深入教师活动:出示任务:输出100—200之间的能被3整除的数。
师生互动:旧题再现,推陈出新。
根据已有知识,引导学生回顾,理出解决此问题的知识点。
学生活动:写出代码,相邻而座的同学间相互对比,运行程序并验证。
程序代码:For i=100 to 200if i mod 3=0 then print inext i教师引导学生分析该题中循环变量i的变化及条件判断的次数,得出穷举法的概念和思想,进入本课重点。
思考:如果输出100—200之间的能被5整除的数,程序可以如何写?怎么优化?师生互动:在学生活动过程中要善于捕捉学生的闪光点,通过多媒体广播系统展示优秀作品。