寻找极小值(C百例)
来源:互联网 发布:手机淘宝怎么降价通知 编辑:程序博客网 时间:2024/05/15 23:50
原问题来源于《C语言精选名题百则-技巧篇》
描述:
因为和顺序相关,所以初步估计和二分有关。自己干脆写一个普通的查找和二分做一个效率上的对比(先输出对应最小数再输出查找的时间):
产生数据:
-11
0.00400000
1
0.04800000
-1
0.00000000
二分:
0.00000000
1
0.00000000
-1
0.00000000
嘿嘿,看来还是折半好用。
描述:
因为和顺序相关,所以初步估计和二分有关。自己干脆写一个普通的查找和二分做一个效率上的对比(先输出对应最小数再输出查找的时间):
产生数据:
#include <iostream>#include<cstdio>using namespace std;int main(int argc, char *argv[]) {freopen("cout.txt","w",stdout);cout<<1000000<<endl;int i;for(i=1;i<=999992;i++)cout<<i<<" ";for(;i<=1000000;i++)cout<<i-1000004<<" "; cout<<endl; cout<<10000000<<endl;for(i=1;i<=10000000;i++)cout<<i<<" "; cout<<endl; cout<<100<<endl;for(i=1;i<100;i++)cout<<i<<" "; cout<<-1<<endl;return 0;}
普通方法:
#include <iostream>#include<cstdio>#include<cstring>#include<time.h>using namespace std; int a[10000005],n;int main(int argc, char *argv[]) {freopen("cin.txt","r",stdin);freopen("cout.txt","w",stdout);while(cin>>n){memset(a,0,sizeof(a));int i; for(i=0;i<n;i++)scanf("%d",&a[i]); clock_t start; start=clock(); for(i=1;i<n&&a[i]>a[i-1];i++); if(i==n)i=0; printf("%d\n",a[i]); printf("%.8lf\n",(double)(clock()-start)/CLOCKS_PER_SEC);}return 0;}输出:
-11
0.00400000
1
0.04800000
-1
0.00000000
二分:
#include <iostream>#include<cstdio>#include<cmath>#include<time.h>using namespace std;int a[10000005],n;int midfind(){ int low=0,high=n+1,mid,res=-1; int count=0,depth=int(log2(n)+1); //while(low<=high){ while(low<n&&high>1){ if(count>depth)break; mid=(low+high)/2; count++; if(a[mid]<a[mid-1]){ res=mid; break; } if(a[mid]>a[0])low=mid; else if(a[mid]<a[0])high=mid; } return res;}int main(){ freopen("cin.txt","r",stdin); freopen("cout.txt","w",stdout); while(cin>>n){ int i; for(i=1;i<=n;i++)scanf("%d",&a[i]); clock_t start; start=clock(); int dex=midfind(); if(dex==-1)dex=1; printf("%d\n",a[dex]); printf("%.8lf\n",(double)(clock()-start)/CLOCKS_PER_SEC); } return 0;}
输出:
-110.00000000
1
0.00000000
-1
0.00000000
嘿嘿,看来还是折半好用。
0 0
- 寻找极小值(C百例)
- 寻找极小值(循环顺序排列)
- 【HDOJ 5838】Mountain(局部极小值)
- [转]C/C++中的基本类型和极大极小值
- 寻找固定的和(C百例)
- 极大极小值算法
- 【CQOI2012】局部极小值
- UVA 11627 Slalom(二分极小值极大化)
- 五子棋(人机)-极大极小值搜索算法
- RMQ算法(维护区间极大极小值)
- python取数作为临时极大值(极小值)
- 成功—失败法和0.618法结合求出局部极小值的C语言实现
- C---高低字节转换、printf本质、有无符号的极大极小值、_Bool
- 求极大和极小值
- 区域极小值—lhMorpRMin
- H极小值—lhMorpHMin
- 扩展极小值—lhMorpEMin
- 找到极大值和极小值
- win7下eclipse连接hadoop
- GRE写作必备句型
- 各种Python插件安装包下载地址
- php-logic-1
- Read_tip_View
- 寻找极小值(C百例)
- Algorithms—21.Merge Two Sorted Lists
- java中override与overload的区别
- win7下eclipse运行mapreduce程序
- HDU2032
- 哈夫曼树(最优二叉树)的创建
- 【图论】【启发式搜索】[POJ 2449]Remmarguts' Date
- LeetCode(48) Rotate Image
- 欢迎使用CSDN-markdown编辑器