《算法设计与分析》蛮力法

《算法设计与分析》蛮力法

ID:40136543

大小:330.87 KB

页数:30页

时间:2019-07-22

《算法设计与分析》蛮力法_第1页
《算法设计与分析》蛮力法_第2页
《算法设计与分析》蛮力法_第3页
《算法设计与分析》蛮力法_第4页
《算法设计与分析》蛮力法_第5页
资源描述:

《《算法设计与分析》蛮力法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、蛮力法1算法分析与设计蛮力法BruteForce蛮力法(枚举法、穷举法,暴力法)要求设计者找出所有可能的方法,然后选择其中的一种方法,若该方法不可行则试探下一种可能的方法。蛮力法是一种直接解决问题的方法,常常直接基于问题的描述和所设计的概念定义。“力”--指计算机的能力,而不是人的智力。蛮力法常常是最容易应用的方法。求an(n为非负整数)用连续整数检测算法计算GCD(m,n)2算法分析与设计蛮力法BruteForce蛮力法不是一个最好的算法(巧妙和高效的算法很少出自蛮力),但当我们想不出更好的办法时,它也是一种有效的解决问题的方法。它可能是惟一一种几乎什么问题都能解决的一般性方法

2、,常用于一些非常基本、但又十分重要的算法,比如计算n个数字的和,求一个列表的最大元素等等。3算法分析与设计蛮力法的优点逻辑清晰,编写程序简洁对于一些重要的问题(比如:排序、查找、矩阵乘法和字符串匹配),可以产生一些合理的算法解决问题的实例很少时,可以花费较少的代价可以解决一些小规模的问题(使用优化的算法没有必要,而且某些优化算法本身较复杂)可以作为其他高效算法的衡量标准4算法分析与设计使用蛮力法的几种情况搜索所有的解空间搜索所有的路径直接计算模拟和仿真5算法分析与设计比较熟悉的蛮力法应用选择排序和起泡排序选择排序:每趟排序在当前待排序序列中选出关键码最小的记录,添加到有序序列中。

3、起泡排序:两两比较相邻记录关键码,如果反序则交换,直到没有反序的记录为止。顺序查找和蛮力字符串匹配顺序查找:从线性表的一端向另一端逐个将关键码与给定值进行比较,若相等,则查找成功,给出该记录在表中的位置;若整个表检测完仍未找到与给定值相等的关键码,则查找失败,给出失败信息。蛮力字符串匹配:即朴素模式串匹配6算法分析与设计根据问题中的条件将可能的情况一一列举出来,逐一尝试从中找出满足问题条件的解。但有时一一列举出的情况数目很大,如果超过了我们所能忍受的范围,则需要进一步考虑,排除一些明显不合理的情况,尽可能减少问题可能解的列举数目。用蛮力法解决问题,通常可以从两个方面进行算法设计:

4、1)找出枚举范围:分析问题所涉及的各种情况。2)找出约束条件:分析问题的解需要满足的条件,并用逻辑表达式表示。蛮力法解题步骤7算法分析与设计【例1】百钱百鸡问题。中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?算法设计1:通过对问题的理解,可能会想到列出两个三元一次方程,去解这个不定解方程,就能找出问题的解。这确实是一种办法,但这里我们要用“懒惰”的枚举策略进行算法设计:设x,y,z分别为公鸡、母鸡、小鸡的数量。尝试范围:由题意给定共100钱要买百鸡,若全买公鸡最多买100/5=20只

5、,显然x的取值范围1~20之间;同理,y的取值范围在1~33之间,z的取值范围在1~100之间。约束条件:x+y+z=100且5*x+3*y+z/3=1008算法分析与设计算法1如下:main() {intx,y,z;for(x=1;x<=20;x=x+1)for(y=1;y<=34;y=y+1)for(z=1;z<=100;z=z+1)if(100==x+y+z&&100==5*x+3*y+z/3){print("thecocknumberis",x);print("thehennumberis",y);print("thechicknumberis",z);} }枚举尝试20

6、*34*100=68000次9算法分析与设计算法设计2:在公鸡(x)、母鸡(y)的数量确定后,小鸡的数量z就固定为100-x-y,无需再进行枚举了此时约束条件只有一个:5*x+3*y+z/3=100算法2如下:10算法分析与设计main() {intx,y,z;     for(x=1;x<=20;x=x+1)                       for(y=1;y<=33;y=y+1){ z=100-x-y;                      if(z%3==0&&5*x+3*y+z/3==100){print("thecocknumberis",x);prin

7、t("thehennumberis",y);print("thechicknumberis",z);}         } }枚举尝试20*33=660次Z能被3整除时,才会判断“5*x+3*y+z/3=10011算法分析与设计例2求所有的三位数,它除以11所得的余数等于它的三个数字的平方和。解题思路:三位数只有900个,可用枚举法解决,枚举时可先估计有关量的范围,以缩小讨论范围,减少计算量。12算法分析与设计解:设这个三位数的百位、十位、个位的数字分别为x,y,z。由于任何数除

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。