算法的优化(举例1)
来源:互联网 发布:星星知我心 原唱 编辑:程序博客网 时间:2024/06/06 01:28
前几天,由于忙着期末考试,一直没有去看算法书,过了几天,感觉也忘得差不多了。所以,以后要继续加油了。
先贴一下题目:
题目很简单,由于n<=50,用四个for循环就可以解决该问题。
但是,当题目中的n变大时,由于用四个for循环的时间复杂度为O(n^4),那么该方法就会运行很长时间,从而导致超时。
下面,我们来介绍一下优化方案,时间复杂度可达到O(n^2 lgn):
我们将四层循环的里面两层进行优化,可以发现 a+b+c+d=m,所以我们可以移项得到a+b=m-c-d,,也就是说只要在a+b的和,也是可以得出结果的。但是,在此之前我们要进行一些预处理。即用一个数组来保存a+b的值。并将其进行排序,然后采用二分法来查找,如果找到,则成功,否则,则失败。
代码如下:
int a[1000] //来保存所有可能的取值int b[n*n] //用来保存预处理的值for(int i=0;i<n;i++) for(int j=0;j<n;j++) b[i*n+j]=a[i]+a[j];sort(b,b+n*n);bool binary_search(int a[],int length,int num){//二分查找 int r=0,l=length-1; while(r<=l){ int i=(r+l)/2; if(a[i]==num) return true; else if(num<a[i]) i=l-1; else i=l+1; }}int main(){ bool y=false; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ int x=m-a[i]-a[j]; if(binary_search(a,n,x)) y=true; } } if(y) cout<<"YES"<<endl; else cout<<"NO"<<endl; return 0;}
0 0
- 算法的优化(举例1)
- 排序算法及优化举例
- 【建模必备】遗传算法应用举例(简单的一元函数优化实例)
- 【建模必备】遗传算法应用举例(多元单峰值函数的优化实例)
- STL的算法举例
- 人工智能 基于遗传算法的随机优化搜索的应用举例
- Base64 算法的应用举例
- HDU 2544 (举例对dijkstra算法的简单讲解)
- Websphere优化 (四个方面)举例
- 一些比较基本的算法举例
- 一些比较基本的算法举例
- 简单的C语言算法举例
- 简单的C语言算法举例
- 遗传算法最简单的举例
- 【举例】Adaboost算法的具体数学公式
- 关于webpack项目资源加载优化的几个实践(以react举例)
- 1.1基本算法举例(上篇)
- 1.2算法基本举例(下篇)
- 寻找符合条件的四位数
- 【Deep Learning】图像数据库
- 安装Sublime Text 3插件的方法
- 1018. Public Bike Management (30)
- oracle数据库SQL相关指标统计分析
- 算法的优化(举例1)
- centos6.8在虚拟机中的安装
- Elasticsearch NoNodeAvailableException None of the configured nodes are available
- Intent详解
- DataBinding学习笔记(一)源码分析
- 输入子系统(2):代码分析
- SMP中多线程程序的性能衰退现象之False Sharing
- 删除子串
- CXF学习创建WebService