计算机算法:穷举法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PPT模板下载:www.1ppt.com/moban/ 节日PPT模板:www.1ppt.com/jieri/ PPT背景图片:www.1ppt.com/beijing/ 优秀PPT下载:www.1ppt.com/xiazai/ Word教程: www.1ppt.com/word/ 资料下载:www.1ppt.com/ziliao/ 范文下载:www.1ppt.com/fanwen/ 教案下载:www.1ppt.com/jiaoan/
【算法】算法用伪代码描述如下: for A:=1 to 3 do
for B:=1 to 3 do for C:=1 to 3 do if(A+B=C) then writeln(A,’’,B,’’C);
华南师范大学 教师发展中心
穷举法
▪ 流程图
N
结束
开始 A=1,B=1,C=1
Leabharlann Baidu
BB+1
N
C1
A<=3
A
B
C
1
1
1
1
1
2
1
1
3

3
3
1
3
3
2
3
3
3
在上述可能解集中,满足题目给定的检验条件(A+B==C)的解元素,即为问题的解。
华南师范大学 教师发展中心
穷举法
▪ 穷举法(枚举法)的特点是算法简单,但是有时运 算量大。为了提高效率必须优化枚举算法。
枚举算法的时间复杂度=状态总数*考查单个状态的耗时
要优化算法,可以从以下方面着手: (1) 排除明显不属于解集的元素 (2) 减少状态总数(即减少枚举变量和枚举变量的值 域) (3) 减低单个状态的考察代价
华南师范大学 教师发展中心
穷举法
▪ 由上述实例可以看出,穷举法(枚举法)是一种使 用非常普遍的思维方法。然而对于同一个问题,可 以选择不同的枚举范围,不同的枚举对象,这样解 决问题的效率差别可能会很大。所以选择合适的方 法会让解决问题的效率大大提高。
华南师范大学 教师发展中心
算法语言描述
main()
{
int x,y,z;
int count;
for(x=1;x<=20;x++)
for(y=1;y<=33;y++)
{
z=100-x-y;
if(z mod 3=0 and 5*x+3*y+z/3=100)
cout<<x<<y<<z; //输出鸡翁,鸡
母,鸡雏的可能取值
count++;
}
华南师范大学 教师发展中心
穷举法
▪ 示例2:百鸡百钱问题。 算法设计二(非懒惰枚举法):假如设了鸡翁和鸡母 的个数为x和y了,那么鸡翁和鸡母的数量就是确定的, 那么鸡雏的数量就是固定的为100-x-y,那么此时就不再 需要进行枚举了,约束条件就只有一个了: 5*x+3*y+z/3=100.
华南师范大学 教师发展中心
穷举法
▪ 示例2:百鸡百钱问题。
算法语言描述
main()
{ int x,y,z; //定义鸡翁,鸡母,鸡雏 int count=0; //统计时间复杂度的变量 for(x=1;x<=20;x++) //鸡翁的取值范围 for(y=1;y<=34;y++) //鸡母的取值范围 for(z=1;z<=100;z++) //鸡雏的取值范围 100==x+y+z and 100==5*x+3*y+z/3; //约束 条件 Cout<<x<<y<<z;//输出鸡翁,鸡母,鸡雏的 可能取值 count++; //统计此算法的时间复杂度
华南师范大学 教师发展中心
穷举法
▪ 示例1:求满足表达式A+B=C的所有整数解,其中 A,B,C为1~3之间的整数。
对于示例1其算法显然可以修改如下: for A:=1 to 3 do
for B:=1 to 3 do begin
C:=A+B; If (C>=1) and (C<=3) then 输出A,B,C end 通过变量的依赖关系减少了解变量的个数(局部枚举),优化了枚举算法, n^3 n^2。
华南师范大学 教师发展中心
穷举法
▪ 对于示例1其算 N 法修改后的流程 图:
BB+1 C1
结束
开始 A=1,B=1,C=1
A<=3
Y
B<=3
Y CA+B
N AA+1 B1
Y N
C∈[1,2,3]
Y 输出A,B,C
华南师范大学 教师发展中心
穷举法
▪ 示例2:百鸡百钱问题。公元前5世纪,我国古代数学 家张丘建在他的《算经》中提出了著名的百鸡百钱问 题“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值 钱一;百钱买百鸡,鸡翁,母,雏各几何?”
穷举法
▪ 示例2:百鸡百钱问题。
N
(非懒惰枚举法)
流程图
N YY+1
开始 定义x,y,z及变量count
X<=20
N
Y
y<=33
Y
Z=100-x-y
XX+1 Y1
N 统计时间 复杂度
结束
如果z%3=0 and 5*x+3*y+z/3=100
Y
输出百鸡的结果 华南师范大学 教师发展中心
穷举法
▪ 示例2:百鸡百钱问题。
Y
B<=3
Y
N AA+1 B1
C<=3
Y
A+B=C?
N
N
CC+1
Y
输出A,B,C
华南师范大学 教师发展中心
穷举法
▪ 示例1:求满足表达式A+B=C的所有整数解,其中 A,B,C为1~3之间的整数。
在本案例中解变量有3个:A,B,C。其中: 解变量A的可能取值范围A∈{1,2,3} 解变量B的可能取值范围B∈{1,2,3} 解变量C的可能取值范围C∈{1,2,3} 从而问题的可能解有3*3*3=27个,可能解集
华南师范大学 教师发展中心
穷举法
▪ 示例2:百鸡百钱问题。
【分析】根据问题中的约束条件将可能的情况一一列举出 来,但如果情况很多,排除一些明显的不合理的情况,尽 可能减少问题可能解的列举数目,然后找出满足问题条件 的解。 完成百鸡百钱问题可以选择两种不同的方法实现。其一是 常规算法(懒惰枚举)的实现,其二是改进算法(非懒惰 枚举)的实现,以实验方法证明对于同一问题可以有不同 的枚举范围,不同的枚举对象,解决问题的效益差别会很 大。
华南师范大学 教师发展中心
穷举法
▪ 示例2:百鸡百钱问题。
算法设计一(懒惰枚举法):首先问题有三种不同的鸡, 那么我们可以设鸡翁为x只,鸡母为y只,鸡雏为z只。由 题意给出一共要用100钱买一百只鸡,如果我们全部买鸡 翁最多可以买100/5=20只,显然x的取值范围是1~20之间; 如果全部买鸡母最多可以买100/3=33只,显然y的取值范 围在1~33之间;如果全部买鸡雏最多可以买100*3=300只, 可是题目规定是买100只,所以z的取值范围是1~100.那么 约束条件为:x+y+z=100且5*x+3*y+z/3=100。
//统计此算法的时间
复杂度
}
}
华南师范大学 教师发展中心
穷举法
▪ 【算法分析】 懒惰枚举法需要尝试20*34*100=68000次,算法的效率 显然很低。非懒惰枚举法只须尝试20*33=660次。实现 时约束条件又限定z能被3整除时,才会判断“5×x+ 3×y+z/3=100 ”。这样省去了z不整除3时的算术 计算和条件判断,进一步提高了算法的效率。
行业PPT模板:www.1ppt.com/hangye/ PPT素材下载:www.1ppt.com/sucai/ PPT图表下载:www.1ppt.com/tubiao/ PPT教程: www.1ppt.com/powerpoint/ Excel教程:www.1ppt.com/excel/ PPT课件下载:www.1ppt.com/kejian/ 试卷下载:www.1ppt.com/shiti/
华南师范大学 教师发展中心
穷举法
▪ 示例1:求满足表达式A+B=C的所有整数解,其中A,B,C 为1~3之间的整数。
【分析】本题非常简单,即枚举变量A,B,C的所有可能 取值情况,对每种取值情况判断是否符合表达式即可。
华南师范大学 教师发展中心
穷举法
▪ 示例1:求满足表达式A+B=C的所有整数解,其中A,B,C为 1~3之间的整数。
华南师范大学 教师发展中心
穷举法
▪ 示例2:百鸡百钱问题。
N
(懒惰枚举法)
流程图
百鸡百钱: x+y+z=100 5*x+3*y+z/3=100
YY+1
统计时间复 杂度
结束
开始 定义x,y,z及变量count
X<20
Y N
y<34
Y N
z<100
Y
百鸡和百钱?
Y 输出百鸡的结果
XX+1
N ZZ+1
华南师范大学 教师发展中心
华师大大学计算机教学团队
穷举法
▪ 穷举法是程序设计中使用最为普遍的一种基础算法。 计算机的特点之一就是运算速度快、善于重复做一 件事情,“穷举法”正是基于这一特点的最古老算 法。它一般是在一时半会找不到解决问题的更好途 径,即从数学上找不到求解的公式或规律时,根据 问题中的“约束条件”,将求解的所有可能情况一 一列举出来,然后再逐一验证它否符合整个问题的 求解要求,从而得到问题的所有解。
相关文档
最新文档