枚举及暴力搜索.pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
枚举及暴力搜索;;什么是时间复杂度? 算法的时间复杂度是一个函数,它定量描述了 该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。 时间复杂度计算出来有什么用? 估计程序能否在规定时间内处理题目指定规模的数据 ;时间复杂度分析;时间复杂度分析;时间复杂度分析;重要的事实:当代计算机1s内可做 10^7左右次计算 配置好的机器可到k*10^7~10^8 在这个限制下时间复杂度一定的算法存在能处理的规模上限 复杂度 数量级 最大规模 O(logN) 10^20 很大 O(N^1/2) 10^12 10^14 O(N) 10^6 10^7 O(NlogN) 10^5 10^6 O(N^2) 1000 2500 O(N^3) 100 500 O(N^4) 50 50 O(2^N) 20 20 O(N!) 9 10 ; 枚举常常是我们面对算法问题时的第一反应 我们总觉得枚举笨笨的,很多人就称之为“暴力算法(brute force)”—不用动太多脑筋,把所有可能性都列举出来,然后一一试验 尽管这样的方法显得很“笨”,但是往往也有其优点,枚举思路简单,无论是程序编写还是调试都很快速方便,在算法竞赛中常常是快速AC的利器;枚举只要运用得好,一点都不笨,对问题进行 一定的分析往往会让算法更加简洁、高效。于是 有了追寻思维的轨迹的过程。 究竟是什么使得枚举得以奏效?我们认为是选准了最适合的枚举对象(范围合适,易验证)。其实我们更是认为,在任何情况下,选准最合适的对象,无论是枚举还是其他算法思想,都是最最关键的。 选准(枚举)对象的根本原因还是在于优化,具体表现为减少求解步骤,缩小求解的解空间,或者是使程序更具有可读性和易于编写 ;例:编写算法解如下数字迷 ABCAB * A = DDDDDD;例:HDU 4091 题意: 背包体积n,绿宝石体积s1,价值v1,蓝宝石体积s2,价值v2,宝石数目无限,问背包里能放下的最大价值? 分析1: 看过去很像完全背包,可n,s1,v1,s2,v2数据均为int范围,所以不能用背包求,也不能全局枚举。 分析2: 只有两种物品,将价值与体积比大(称为价值比)的优先放入。 分析3: 但是如:n=24 s1=6 v1=8 s2=10 v2=15,就会发现选???性价比较小的反而结果较好.24 / 6 * 8 = 32 24 / 10 * 15 = 30 分析4: 采用大数据选择价值比高的,小数据局部进行枚举(缩小解空间) ;例:TC多校专场 500 给一个数n (n10^18),问满足: 1、x是n的除数 2、存在y满足 x = y * y 求解满足条件的最大x ;我们有时候会用到枚举全排列 一种是采用递归编写 一种调用stl库函数使用 ;例:POJ 3311(7.27周末个人赛B题) 有n(=10)个点,送披萨的要送过去,告诉你任意两点的距离,问怎么个送法走的路最短(最后要回到披萨店(0))? ;我们有时候会用到枚举一个集合的子集, 在算法竞赛中我们常常用二进制来表示 集合状态;如下为枚举子集的代码 #include cstdio int main() { int x = (14) - 1; for(int i=x;i0;i=(i-1)x) { //循环内部为输出 for(int j=4-1;j=0;j--) if(i (1j)) printf(1); else printf(0); puts(); } };例:UVA 11205 对于数码管LED显示数字,我们常常是将若干数码管组合起来用以描述一个数字,如右图。我们发现可以用7根数码管来表示0,1,2…9 ,也发现去掉最下方的数码管同样可以表示出0,1,2…9. 如下图所示。给你若干由数码管描述的数字,问最少可以用几根来描述所有数字;输入n(=15),m(=100)分别表示当前数码管的个数,有m个数字,随后m行每行n个数码管的状态用以表示该数字。;例:POJ 3311(7.27周末个人赛B题) 有n(=10)个点,送披萨的要送过去,告诉你任意两点的距离,问怎么个送法走的路最短(最后要回到披萨店(0))? ;我们会遇到一些问题比如: 在一个单调的函数内找到等于零的点,在一个抛物线内找到极值。由于解空间无限,全局枚举

文档评论(0)

2837587390 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档