- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 蛮力法 3.1 方法概述3.2 查找问题中的蛮力法3.3 排序问题中的蛮力法3.4 组合问题中的蛮力法3.5 图问题中的蛮力法3.6 几何问题中的蛮力法3.7 实验项目——串匹配问题3.1方法概述一、蛮力法的设计思想 蛮力法(也称暴力法,穷举法或枚举法)是指采用遍历(扫描)技术,即采用一定的策略将待求解问题的所有元素依次处理一次,从而找出问题的解。二、设计的关键 依次处理所有元素是蛮力法的关键,为了避免陷入重复试探,应保证处理过的元素不再被处理。 3.1方法概述三、特点算法简单,但执行效率低。因此蛮力法的关键在于提高编程效率。“力”——指计算机的能力,而不是人的智力。蛮力法不是一个最好的算法(巧妙和高效的算法很少出自蛮力),但当我们想不出更好的办法时,它也是一种有效的解决问题的方法。它可能是唯一一种几乎什么问题都能解决的一般性方法,是一种非常基本、但又十分重要的算法设计方法。3.1方法概述四、使用技术蛮力法所赖的基本技术——扫描技术基本的扫描技术——遍历(1)集合的遍历(2)线性表的遍历(3)树的遍历 (4)图的遍历 ……3.1方法概述 五、适用范围 (1)理论上,蛮力法可以解决可计算领域的各种问题。 (2)蛮力法经常用来解决一些较小规模的问题。 (3)对于某些问题,蛮力法可以产生一些合理的算法,他们具备一定实用价值,而且不受问题规模的限制。 (4)蛮力法可以作为某类问题时间性能的底限,作为衡量同样问题效率的基础算法。 3.1方法概述六、求解过程 根据问题中的条件将可能的情况一一列举出来,逐一尝试从中找出满足问题条件的解。但有时列举的情况数目很大,则需要排除一些明显不合理的情况,以减少问题可能解规模。用蛮力法解决问题,通常从两个方面进行算法设计:1)找出枚举范围:分析问题所涉及的各种情况。2)找出约束条件:分析问题的解需要满足的条件,并用逻辑表达式表示。3.1方法概述思考下面问题:找出枚举范围和约束条件求所有的三位数,它除以11所得的余数等于它的三个数字的平方和.枚举范围:100—999,共900个。约束条件:设三位数的百位、十位、个位的数字分别为x,y,z。则有x2+y2+z2≤10,进而1≤x≤3, 0≤y≤3, 0≤z≤3。解:所求三位数必在以下数中: 100,101,102,103,110,111,112, 120,121,122,130,200,201,202, 210,211,212,220,221,300,301,310。 不难验证只有100,101两个数符合要求。 3.2 查找问题中的蛮力法 3.2.1 顺序查找 3.2.2 串匹配问题 0 1 2 3 4 5 6 7 8 91015 24 612 354098 55i查找方向 0 1 2 3 4 5 6 7 8 9 10 15 24 61235 40 9855i查找方向3.2.1 顺序查找 一、问题描述与分析 思路:顺序查找从表的一端向另一端逐个将元素与给定值进行比较,若相等,则查找成功,给出该元素在表中的位置;若整个表检测完仍未找到与给定值相等的元素,则查找失败,给出失败信息。C++描述算法3.2.1.1——顺序查找 int SeqSearch1(int r[ ], int n, int k) //数组r[1] ~ r[n]存放查找集合 { i=n; while (i0 r[i]!=k) i--; return i; }3.2.1 顺序查找 二、算法设计与分析基本语句 ?算法3.1的基本语句是i0和r[i]!=k,其执行次数为:0 1 2 3 4 5 6 7 8 9k 10 15 24 6 12 35 40 98 55哨兵i查找方向3.2.1 顺序查找 三、改进的顺序查找将待查值放在查找方向的尽头处,免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高了查找速度。C++描述算法3.2.1.2——改进的顺序查找 int SeqSearch2(int r[ ], int n, int k) //数组r[1] ~ r[n]存放查找集合 { r[0]=k; i=n; while (r[i]!=k) i --; return i;}3.2.1 顺序查找 算法3.2的基本语句是r[i]!=k,其执行次数为: 数量级相同,系数相差一半3.2.1
文档评论(0)