- 1、本文档共58页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2014算法的大全
算法详解及练习题
目 录
第一讲 穷举法 ------------------------------ 1
第二讲 字符与字符串处理 -------------------- 16
第三讲 不同进制转换 ------------------------ 25
第四讲 高精度计算 -------------------------- 26
第五讲 数据排序 ---------------------------- 30
第六讲 约瑟夫问题(纸牌问题)--------------- 34
第七讲 矩阵(递推问题)--------------------- 40
第八讲 排列组合 ---------------------------- 43
第九讲 贪心算法 ---------------------------- 47
第十讲 递归算法 ---------------------------- 56
第一讲 穷举法
一、穷举法的基本概念
穷举方法是基于计算机特点而进行解题的思维方法。一般是在一时找不出解决问题的更好途径(即从数学上找不到求解的公式或规则)时,可以根据问题中的的部分条件(约束条件)将所有可能解的情况列举出来,然后通过一 一验证是否符合整个问题的求解要求,而得到问题的解。这样解决问题的方法我们称之为穷举算法。穷举算法特点是算法简单,但运行时所花费的时间量大。有些问题所列举出来的情况数目会大得惊人,就是用高速的电子计算机运行,其等待运行结果的时间也将使人无法忍受。因此,我们在用穷举方法解决问题时,应尽可能将明显的不符合条件的情况排除在外,以尽快取得问题的解。
二、算法模式
问题解的可能搜索的范围: 用循环或循环嵌套结构实现,写出符合问题解的条件。
能使程序优化的语句,以便缩小搜索范围,减少程序运行时间。
三、使用穷举法设计算法
例1:百钱买百鸡问题:有一个人有一百块钱,打算买一百只鸡。到市场一看,大鸡三块钱一只,小鸡一块钱三只,不大不小的鸡两块钱一只。现在,请你编一程序,帮他计划一下,怎么样买法,才能刚好用一百块钱买一百只鸡?
算法分析:此题很显然是用枚举法,我们以三种鸡的个数为枚举对象(分别设为x,y,z),以三种鸡的总数(x+y+z)和买鸡用去的钱的总数(x*3+y*2+z)为判定条件,穷举各种鸡的个数。
下面是解这个百鸡问题的程序
var x,y,z:integer;
begin
for x:=0 to 100 do
for y:=0 to 100 do
for z:=0 to 100 do{枚举所有可能的解}
if (x+y+z=100)and(x*3+y*2+z div 3=100)and(z mod 3=0)then writeln(x=,x,y=,y,z=,z); {验证可能的解,并输出符合题目要求的解}
end.
上面的条件z=100-x-y),这样就缩小范围请看下面的程序:var x,y,z:integer;
begin
for x:=0 to 100 do
for y:=0 to 100-x do
begin
z:=100-x-y;
if (x*3+y*2+z div 3=100)and(z mod 3=0)then writeln(x=,x,y=,y,z=,z);
end;
end.
未经优化的程序循环了1013 次,时间复杂度为O(n3);优化后的程序只循环了(102*101/2)次 ,时间复杂度为O(n2)。从上面的对比可以看出,对于枚举算法,加强约束条件,缩小枚举的范围,是程序优化的主要考虑方向。
在枚举算法中,枚举对象的选择也是非常重要的,它直接影响着算法的时间复杂度,选择适当的枚举对象可以获得更高的效率。如下例:
var
t,x:integer; s,st:string; c:char;
begin
for x:=123 to 329 do{枚举所有可能的解}
begin
t:=0;
str(x,st);{把整数x转化为字符串,存放在st中}
str(x*2,s); st:=st+s;
str(x*3,s); st:=st+s;
for c:=1 to 9 do{枚举9个字符,判断是否都在st中}
if pos(c,st)0 then inc(t) else break;{如果不在st中,则退出循环}
if t=9 then writeln(x, ,x*2, ,x*3);
end;
end.
在枚举法解题中,判定条件的确定也是很重要的,如果约束条件不对或者不全面,就穷举不出正确的结果,?我们再看看下面的例子。
28的因子是1、2、4、7、14,
您可能关注的文档
- 19 如何打造高绩的效团队09808.ppt
- 17《孔子拜的师》PPT课件.ppt
- 1992年的西医综合.pdf
- 19.1.1变量与的函数(第一课时).ppt
- 1986-1990年的考研英语真题及解析.pdf
- 18的 常用图像测量技术2.ppt
- 19全局的变量.ppt
- 19的.1.1变量.doc
- 19库函数、函数的定义和返的回值.ppt
- 19939项目五巡的航控制系统的检测与设定.ppt
- 人教版九年级英语全一册单元速记•巧练Unit13【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit9【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit11【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit14【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit8【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit4【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit13【单元测试·基础卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit7【速记清单】(原卷版+解析).docx
- 苏教版五年级上册数学分层作业设计 2.2 三角形的面积(附答案).docx
- 人教版九年级英语全一册单元速记•巧练Unit12【单元测试·基础卷】(原卷版+解析).docx
文档评论(0)