数据构造方法

以最大连续子序列和算法为例。

算法源代码:

 1 #include<bits/stdc++.h>
 2 #define N 1000000
 3 using namespace std;
 4 
 5 int n;
 6 int a[N],dp[N];
 7 int MAXN=-(1<<30);
 8 
 9 int main(){
10     freopen("data.out","r",stdin);//重定向 
11     cin>>n;
12     for(int i=1;i<=n;i++){//读入数据 
13         cin>>a[i];
14     }
15     dp[1]=a[1];//边界 
16     for(int i=2;i<=n;i++){//核心代码 
17         dp[i]=max(a[i],dp[i-1]+a[i]);//状态转移方程 
18         MAXN=max(MAXN,dp[i]);//更新最优解 
19     }
20     cout<<MAXN;
21     return 0;
22 }

数据生成代码(生成-50~49之间随机数据)

 1 #include<bits/stdc++.h>
 2 #define N 1000000 //数据规模(可调) 
 3 using namespace std;
 4 int main (){
 5    freopen("data.out","w",stdout);//重定向 
 6    int i,j;
 7    srand( (unsigned)time( NULL ) );//随机数种子 
 8    cout<<N<<endl;
 9    for(i=0;i<N;i++){//生成随机数 
10       j= rand()%100-50;
11       cout<<j<<" ";
12    }
13    return 0;
14 }

算法时间复杂度O(N),数据规模100w时运行时间大约0.65s,但是很明显还是不能支持数据规模1000w情况

注意:

1.两个代码中重定向的文件名称要保持一致,且两个cpp文件在同一文件夹下。

2.使用时先执行下面代码,再执行上面代码,即可输出结果,打开重定向文件可查看生成数据。

原文地址:https://www.cnblogs.com/Wag-Ho/p/14824066.html