深度优先搜索之偏爱时间复杂度
2016-04-05 15:02
288 查看
题目要求给你一些数字 , 其中的一些数字相加能不能等于已经给定的数字 sum ? 对这个问题我写了一个程序 , 然而总是超时 , 无药可救但是 看了别人的 程序 , 人家的程序运行得效率特别高 , 然后分析了一下 , 颇有感想决定记录下来 给出一组数据 例如 1 2 4 7 给定总和为 13 问在这几个数字中有没有几个数字的和 等于 所给数字 13的 然后我就没耽误事 开始暴力搜索了 ... 下面附上代码和分析
void DFS(int n,int sum) { for(int i=0;i<n;i++) { if(mark) return ; if(!visited[i]) // 如果该数字 没有被使用过的话 { visited[i]=1; maxn=maxn+a[i]; if(maxn==sum) { mark=1; break; } DFS(n,sum); maxn=maxn-a[i]; visited[i]=0; } } }
我的代码 时间复杂度极高 将所有的可能性都列出来 并且还是 , 当顺序不一样其中元素一样的时候 我也列了出来 . . . . . . 我知道你和我同样的无语 , 这样的时间复杂度真是高的可怕 . 以前的时候 自己太懒 学了 对于图的搜索之后 就开始按照同样的套路开始对 数列进行 搜索 , 一直都会有超时情况的出现 , 但是一直都是 新三年旧三年缝缝补补又三年 ..... 今天就好好的总结一下经验教训 解决了这个问题 . . .
下面附上 , 一个学姐写的代码
bool DFS(int i,int m) { if(i==n) return sum==m; else if(sum<m) return false; if(DFS(i+1,m)) return true; if(DFS(i+1,a[i]+m)) return true; return false; }
学姐的代码 , 虽然也是将所有的情况都列出来 ( 不可能的时候有剪枝 ) , 但是学姐的代码 顺序不一样但是元素一样 的情况是没有出现的 . 这样就高效的很
相关文章推荐
- css3 transition 实例及分析 图片hover出现文字 sidebar平滑过渡(动画系列3)
- java中处理数据精度丢失
- Map-Reduce核心之shuffle过程
- Java NIO系列教程(七) FileChannel
- R语言绘图渐进
- 灰度共生矩阵(GLCM)
- Jsoup学习-使用Jsoup抓取页面数据
- Widora 的Openwrt 系统源代码编译
- 如何在源码中使用app
- 40+ Sublime Text 最佳插件汇总
- Deepin 2015 安装后找不到win10 启动选项的解决办法
- css设置元素宽高比
- java是单继承的
- hdu1325 Is It A Tree?--并查集
- 排序算法分析(JAVA)
- Java NIO系列教程(六) Selector
- python pdfkit 中文乱码问题处理
- mysql skip-grant-tables 添加用户报错 ERROR 1290
- 通过url请求数据
- springmvc深入学习----xml配置