第 2 章 枚 举 教学要求 本章重点 了解枚举算法的概念与枚举设计要领 应用枚举求解统计求和与求最值等基本案例

Slides:



Advertisements
Similar presentations
A A A.
Advertisements

四、后期物理复习备考建议 不同阶段复习课教学设计(知识建构)的目的 复习课教学 设计的目的 理 解 · 对某知识的全面、抽 象理解 · 抽象知识和具体情景 的转化 综 合 · 多知识点联合解决问 题 基本素质 · 审题、表达、审视答 案等基本能力 复习 ( 一 ) 复习(二) ☆ ☆☆☆ ☆☆  进行科学规划.
第一节 人口的数量变化.
无效宣告请求书与 意见陈述书代理实务 国家知识产权局专利复审委员会
普通高等学校 本科教学工作水平评估方案.
成才之路 · 语文 人教版 • 中国古代诗歌散文欣赏 路漫漫其修远兮 吾将上下而求索.
招考新政与高中学校面临的挑战 芜湖市教育科学研究所 俞宏胜
浙江省深化高校考试招生制度综合改革试点方案(2017新方案)
第二章 复式记账原理*** 主要内容、重点难点: 1.会计要素与会计等式*** 2.会计科目与账户*** 3. 借贷记账法***
2 016 陕西广播电视台 餐饮娱乐行业广播投放方案 【第一版】.
探索确定位置的方法 王积羽.
2011年10月31日是一个令人警醒的日子,世界在10月31日迎来第70亿人口。当日凌晨,成为象征性的全球第70亿名成员之一的婴儿在菲律宾降生。 ?
《山西省2008年初中数学学业考试说明》解读及复习建议
第九课时 二元一次方程组 .
江苏省2008年普通高校 招生录取办法 常熟理工学院学生处
《中医基础理论》 考试题型特点和答题指导.
成才之路 · 语文 人教版 • 中国古代诗歌散文欣赏 路漫漫其修远兮 吾将上下而求索.
七(7)中队读书节 韩茜、蒋霁制作.
1、分别用双手在本上写下自己的名字 2、双手交叉
南美洲 吉林省延吉一高中 韩贵新.
初级会计实务 第八章 产品成本核算 主讲人:杨菠.
第三课 走向自立人生.
摇摆的中东地区 永嘉县实验中学 张 杰.
摇摆的中东地区 永嘉县实验中学 张 杰.
2016届高三期初调研 分析 徐国民
2007年11月考试相关工作安排 各考试点、培训中心和广大应考人员:
中考阅读 复习备考交流 西安铁一中分校 向连吾.
高考新改革与过渡 怀化市铁路第一中学 向重新.
分式的乘除(1) 周良中学 贾文荣.
第四章 制造业企业 主要经济业务核算.
必修Ⅰ 地球上的水 第三章.
《思想品德》七年级下册 教材、教法与评价的交流 金 利 2006年1月10日.
财经法规与会计职业道德 (3) 四川财经职业学院.
中央广播电视大学开放教育 成本会计(补修)期末复习
人教版义务教育课程标准实验教科书 小学数学四年级上册第七单元《数学广角》 合理安排时间 248.
市级个人课题交流材料 《旋转》问题情境引入的效果对比 高淳县第一中学 孔小军.
致亲爱的同学们 天空的幸福是穿一身蓝 森林的幸福是披一身绿 阳光的幸福是如钻石般耀眼 老师的幸福是因为认识了你们 愿你们努力进取,永不言败.
你不得不知的几件事 2、图书《10天行测通关特训》 3、网络课程 《网校9元课程系列》《考前强化夜校班》 4、地面课程 《10天10晚名师密授营》《考前预测集训营》
我国三大自然区.
专题二 识图题增分技巧.
第四章 时间序列的分析 本章教学目的:①了解从数量方面研究社会经济现象发展变化过程和发展趋势是统计分析的一种重要方法;②掌握时间数列编制的基本要求;③理解和掌握水平速度两方面指标的计算及运用④理解和掌握长期趋势分析和预测的方法。 本章教学重点:现象发展的水平指标和速度指标。 本章教学难点:现象变动的趋势分析。
崇拜即將開始,請大家安靜片刻, 預備心靈敬拜上帝。
第十二单元 第28讲 第28讲 古代中国的科技和文艺   知识诠释  思维发散.
统计从业资格考试培训 主讲:张良.
“08高考化学学业水平(必修科目)测试的命题和教学对策研究”
中考语文积累 永宁县教研室 步正军 2015.9.
课标教材下教研工作的 实践与思考 山东临沂市教育科学研究中心 郭允远.
小学数学知识讲座 应用题.
第八章二元一次方程组 8.3实际问题与二元一次方程组.
第八章二元一次方程组 8.3实际问题与二元一次方程组 (第3课时).
倒装句之其他句式.
江苏省2009年普通高校 招生录取办法 江苏省教育考试院
第 22 课 孙中山的民主追求 1 .近代变法救国主张的失败教训: “师夷之长技以制 夷”“中体西用”、兴办洋务、变法维新等的失败,使孙中山
主要内容: 1.选址问题的概念 2.单点选址模型 3.多点选址模型 4.其他方法概况
导数及其应用 高三数学组 葛乃兵.
第四章 直线与平面、两平面的相对位置 内 容 提 要 §4-1 直线与平面平行 • 两平面平行 §4-2 直线与平面的交点 • 两平面的交线
107上五年級〈社會科〉學校日簡報 教師個人檔案 ★民國77年8月開始任職本校 ★在本校擔任自然科任1年、導師8年、
第二节 山地的形成.
不動產估價.
数轴、相反数与绝对值 本节内容 本课内容 1.2.
第八节 算术运算符和算术表达式.
職業學校群科課程綱要規劃原理及修訂重點 報告人:鄭慶民
基本不等式.
鏈球的力學分析 日本奧運鏈球冠軍(82米91) 室伏廣治因小腿肌肉受傷,退出杜哈亞運。 俄羅斯「鐵娘子」泰亞娜.李森科 九十五年八月八日在
一.椭圆的定义 (1)定义:平面内两定点为F1、F2,当动点P满足条件点P到点F1、F2的距离之和等于常数(大于|F1F2|)时,P点的轨迹为椭圆;F1、F2是椭圆的两个焦点. (2)定义的数学表达式为:|PF1|+|PF2|=2a(2a>|F1F2|). (3)注意:定义中,“定值大于|F1F2|”(即2a>2c)是必要条件.当2a=|F1F2|时,动点轨迹是两焦点的连线段;而当2a
05 债务重组.
數學科98課綱 種子教師培訓課程 (四) 教學示例
畢氏定理(百牛大祭)的故事 張美玲 製作 資料來源:探索數學的故事(凡異出版社).
成本會計 在決策中的功能 第四課 1.
102年人事預算編列說明 邁向頂尖大學辦公室製作.
Presentation transcript:

第 2 章 枚 举 教学要求 本章重点 了解枚举算法的概念与枚举设计要领 应用枚举求解统计求和与求最值等基本案例 第 2 章 枚 举 教学要求 了解枚举算法的概念与枚举设计要领 应用枚举求解统计求和与求最值等基本案例 本章重点 对某些枚举算法进行改进与优化 掌握枚举算法时间复杂度分析

2.1 枚举概述 1. 枚举的概念 (1) 枚举法(Enumerate)也称为列举法、穷举法,是蛮力策略的体现,又称为蛮力法。 2.1 枚举概述 1. 枚举的概念 (1) 枚举法(Enumerate)也称为列举法、穷举法,是蛮力策略的体现,又称为蛮力法。 (2) 枚举是一种简单而直接地解决问题的方法,其基本思想是逐一列举问题所涉及的所有情形 。 (3) 应用枚举时应注意对问题所涉及的有限种情形进行一一列举,既不能重复,又不能遗漏。

2. 枚举的框架描述 n=0; for(k=<区间下限>;k<=<区间上限>;k++) // 控制枚举范围 2. 枚举的框架描述 n=0; for(k=<区间下限>;k<=<区间上限>;k++) // 控制枚举范围 if(<约束条件>) // 根据约束条件实施筛选 { printf(<满足要求的解>); // 输出解 n++; // 统计解的个数 }

3. 枚举的实施步骤 (1)根据问题的具体情况确定枚举量(简单变量或数组); (2)根据问题的具体实际确定枚举范围,设置枚举循环; 3. 枚举的实施步骤 (1)根据问题的具体情况确定枚举量(简单变量或数组); (2)根据问题的具体实际确定枚举范围,设置枚举循环; (3)根据问题的具体要求确定筛选(约束)条件; (4)设计枚举程序并运行、调试,对运行结果进行分析与讨论。

2.2 统计与求和 2.2.1 指定特殊整数 案例提出: 试求含有数字7且不能被7整除的5位整数的个 数,并求这些整数的和。 2.2 统计与求和 2.2.1 指定特殊整数 案例提出: 试求含有数字7且不能被7整除的5位整数的个 数,并求这些整数的和。 同时,求这些整数中恰含2个数字7的整数的个 数,以及这些整数的和。

1. 枚举设计要点 一般地,设m,n为一位正整数,含有数字m且不能被m整除的n位整数的个数为g1,这些整数的和为s1。其中恰含2个数字m的整数的个数g2及其和s2。 (1) 设置k循环,循环n-1次相乘求出最小的n位整数t。 然后设置k从t至10*t-1循环,枚举所有n位整数。 (2) 每个n位整数k赋给d(为了保持k不变)。然后通过n次求余先后分离出k的数字c,并通过f(c)=f(c)+1统计数字c 的个数。 例如f(7)=2,说明k中恰含2个数字7;若f(3)>0,说明k中含有数字3。 (3) 据f(m)>0 && k%m>0检测含有数字m且不能被m整除,g1与s1作统计求和。 (4) 据f(m)=2 && k%m>0检测恰含2个m且不能被m整除,g2与s2作统计求和。

2. 枚举设计描述 for(k=t;k<=10*t-1;k++) // 枚举每一个n位数 { d=k; for(j=0;j<=9;j++) f[j]=0; for(j=1;j<=n;j++) { c=d%10; f[c]+=1; d=d/10; } if(f[m]>0 && k%m>0) {g1++;s1+=k;} if(f[m]==2 && k%m>0) {g2++;s2+=k;} }

2.3 解方程 2.3.1 解佩尔方程 案例提出: 佩尔(Pell)方程是关于x,y的二次不定方程 (其中n为非平方正整数) 2.3 解方程 2.3.1 解佩尔方程 案例提出: 佩尔(Pell)方程是关于x,y的二次不定方程 (其中n为非平方正整数) 当x=1或x=-1,y=0时,显然满足方程。常把x,y中有一个为零的解称为平凡解。我们要求佩尔方程的非平凡解。

1. 枚举设计要点 设置y从1开始递增1取值,对于每一个y值,计算a=n*y*y后判别: 1. 枚举设计要点 设置y从1开始递增1取值,对于每一个y值,计算a=n*y*y后判别: 若a+1为某一整数x的平方,则(x,y)即为所求佩尔方程的基本解。 若a+1不是平方数,则y增1后再试,直到找到解为止。 应用以上枚举探求,如果解的位数不太大,总可以求出相应的基本解。 如果基本解太大,应用枚举无法找到基本解,可约定一个枚举上限,例如10000000。可把y<=10000000作为循环条件,当y>10000000时结束循环,输出“未求出该方程的基本解!”而结束。

2. 枚举设计描述 y=1; while(y<=10000000) { y++; // 设置y从1开始递增1枚举 a=n*y*y; x=floor(sqrt(a+1)); if(x*x==a+1) // 检测是否满足方程 { printf(" x=%.0f, y=%.0f\n",x,y); break; }

2.4 解不等式 2.4.1 分数不等式 案例提出:

1. 枚举设计要点 设和变量为s,递增变量为i,两者赋初值为0。 在s<=m1的条件循环中,根据递增变量i对s累加求和,直至出现s>m1退出循环,赋值c=i,所得c为n解区间的下限。 继续在s<=m2的条件循环中,根据递增变量i对s累加求和,直至出现s>m2退出循环,通过赋值d=i-1,所得d为n解区间的上限。注意,解的上限是d=i-1,而不是i。 然后打印输出不等式的解区间[c,d]。

2. 枚举设计描述 scanf("%ld,%ld",&m1,&m2); i=0;s=0; while(s<=m1) {i=i+1;s=s+sqrt(i)/(i+1);} c=i; do while(s<=m2); printf(“ %ld≤n≤%ld \n”,c,i-1);

2.5 求最值 2.5.2 整数的因数比 案例提出: 设整数a的小于其本身的因数之和为s,定义 p(a)=s/a 为整数a的因数比。 2.5 求最值 2.5.2 整数的因数比 案例提出: 设整数a的小于其本身的因数之和为s,定义 p(a)=s/a 为整数a的因数比。 试求指定区间 [x,y]中整数的因数比最大值。

1. 枚举设计要点 为了求整数a的因数和s,显然1是因数。设置k(2——sqrt(a))循环枚举,如果k是a的因数,则a/k也是a的因数。显然k≤a/k。 如果a=b*b,显然k=b,a/k=b,此时k=a/k。而因数b只有一个,所以此时必须从和s中减去一个b,这样处理以避免重复。 设置max存储因数比最大值。枚举区间内每一整数a,求得其因数和s。通过s/a与max比较求取因数比最大值。

2. 枚举设计描述 scanf("%lf,%lf",&x,&y); for(a=x;a<=y;a++) // 枚举区间内的a {s=1;b=sqrt(a); for(k=2;k<=b;k++) // 试商寻求a的因数k if(fmod(a,k)==0) s=s+k+a/k; if(a==b*b) s=s-b; t=s/a; if(max<t) {max=t;a1=a;s1=s;} } printf(" %.0f,%.4f \n",a1,max);

案例提出: 2.6 数组与数列 2.6.2 基于2x+3y的递推数列 已知集合A定义如下: (1)1∈A,2∈A 2.6 数组与数列 2.6.2 基于2x+3y的递推数列 案例提出: 已知集合A定义如下: (1)1∈A,2∈A (2)x,y∈A且x≠y => 2x+3y∈A (3)再无其他数属于A。 试求集合A中元素从小到大排列序列的第n项。

1. 枚举设计要点 设置a数组存储序列各项,a(t)为序列的第t项。显然a(1)=1,a(2)=2。 设t为项数,在t<n的条件循环中,变量k从2开始递增1取值。 若k可由已有的项a(j),a(i) (j<i)推得,即若k满足k=2*a(j)+3*a(i) 或k=2*a(i)+3*a(j),说明k是a数列中的一项,赋值给a(t)。 当项数t达到规定项数n时,则退出循环,打印输出a(n)后结束。

2. 枚举设计描述 scanf("%d",&n); a[1]=1;a[2]=2;t=2;k=2; while(t<n) {k++;h=0; // 枚举k是否为A集项 for(i=2;i<=t;i++) {for(j=1;j<=i-1;j++) if(k==2*a[j]+3*a[i] || k==2*a[i]+3*a[j]) { h=1;t++;a[t]=k;} if(h==1) break;} } printf(" a(%d)=%d ",n,a[n]);

2.7 数式探求 2.7.2 完美综合式 案例提出: 把数字1,2,...,9这9个数字分别填入以下含加、减、乘、除与乘方(^)的综合运算式中的9个□中 □^□+□□÷□□-□□×□=0 要求数字1,2,...,9这9个数字在式中出现一次且只出现一次,且约定数字“1”不出现在乘、乘方的一位数中。

1. 枚举设计要点 设置整数变量,其中a^b用a自乘b次实现。 即要求的综合运算式为: a^b+z/c-d*e=0 设置a,b,c,d,e循环,对每一组a,b,c,d,e,计算z=(d*e-a^b)*c,省略z循环。 检测z是否为二位数。若z非二位数,则返回。 对6个整数进行数字分离,设置f数组对分离的9个数字进行统计,f(x)即为数字x(1—9)的个数。 若某f(x)不为1,标记t=1,则返回。 若所有f(x)全为1,保持标记t=0, 则输出。

2. 枚举设计描述 for(a=2;a<=9;a++) for(b=2;b<=9;b++) for(c=12;c<=98;c++) for(d=12;d<=98;d++) // 实施枚举 for(e=2;e<=9;e++) { for(t=1,k=1;k<=b;k++) t=t*a; z=(d*e-t)*c; if(z<10 || z>98) continue; m[1]=a;m[2]=b;m[3]=c;m[4]=d;m[5]=e;m[6]=z;

2. 枚举设计描述续 for(x=0;x<=9;x++) f[x]=0; for(k=1;k<=6;k++) { y=m[k]; while(y>0) { x=y%10;f[x]=f[x]+1;y=y/10;} } for(t=0,x=1;x<=9;x++) if(f[x]!=1) {t=1;break;} if(t==0) 则输出一个解;

2.8 趣味数阵 自学,可选为课程设计题材。 2.9 枚举应用小结 应用枚举求解,在设计上比较简单,不存在太多难点,但 决不可太随意。 2.8 趣味数阵 自学,可选为课程设计题材。 2.9 枚举应用小结 应用枚举求解,在设计上比较简单,不存在太多难点,但 决不可太随意。 从本章诸案例的枚举设计求解可以看出,枚举思路的调整、 枚举规律的归纳、枚举结构的设置与枚举参量的选择,都有 一定的技巧运用,自然也存在许多改进与优化的空间。

1. 简化计算,调整思路 求解案例,根据案例的具体实际确定枚举方案的过程中,简化计算流程,调整求解思路。 2. 观察归纳,寻求规律 面对一个具体案例,通过反复的观察、比较、归纳、总结,找出一般规律,才能确立求解思路与算法。 3. 减少重复,优化结构 在进行枚举设计时,优化枚举结构,减少重复操作,可望在降低枚举的时间复杂度方面收到好的成效。 4. 细化操作,精简参数 枚举结构确定之后,根据案例的具体实际确定合适的参数,是缩减无效操作,提高枚举效率的重要一环。

第2章作业 第2章上机 习题2: 1, 2, 3, 4, 5, 6, 7, 8 上机通过本章例2-1, 2-2, 2-3, 2-4; 习题2: 1, 2, 3, 4, 5, 6, 7, 8 第2章上机 上机通过本章例2-1, 2-2, 2-3, 2-4; 上机通过习题 2-3, 2-4, 2-7, 2-8; 上机通过习题 2-9,输出: n= 80 时, 结果: ; n= 100 时,结果: 。

欢迎大家提出教学建议 返回