算法分析
完整代码:
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include<iomanip>
using namespace std;
int largesum=-10;
//蛮力法
void BruteForce(int a[], int n){
for(int i=0; i<n; i++){
int sum=0;
for(int j=i; j<n; j++){
sum+=a[j];
if(sum>largesum){
largesum=sum;
}
}
}
}
//动态规划
void Dynamic(int a[], int n){
int sum[n][n] = {0};
for(int i=0; i<n; i++){
sum[i][i] = a[i];
}
for(int i=0; i<n; i++){
for(int j=i+1; j<n; j++){
sum[i][j] = sum[i][j-1]+a[j];
if(sum[i][j]>largesum){
largesum=sum[i][j];
}
}
}
}
int main(){
LARGE_INTEGER nFreq;
LARGE_INTEGER nBeginTime;
LARGE_INTEGER nEndTime;
double time;
int a[6];
int i=6, j,sum=0;
cout<<"请依次输入数字"<<endl;
for(j=0;j<6;j++)
{
cin>>a[j];
}
cout<<"************蛮力法************"<<endl;
QueryPerformanceFrequency(&nFreq);
QueryPerformanceCounter(&nBeginTime);
BruteForce(a, i);
cout<<"最大子段和为:"<<largesum<<endl;
QueryPerformanceCounter(&nEndTime);
time=(double)(nEndTime.QuadPart-nBeginTime.QuadPart)*1000000000/(double)(nFreq.QuadPart);
cout <<"蛮力法所花的时间为(纳秒):" << time<<endl; //单位是纳秒.
cout<<"************动态规划函数************"<<endl;
QueryPerformanceFrequency(&nFreq);
QueryPerformanceCounter(&nBeginTime);
Dynamic(a, i);
cout<<"最大子段和为:"<<largesum<<endl;
QueryPerformanceCounter(&nEndTime);
time=(double)(nEndTime.QuadPart-nBeginTime.QuadPart)*1000000000/(double)(nFreq.QuadPart);
cout <<"动态规划法所花的时间为(纳秒):" << time<<" 纳秒"<<endl; //单位是纳秒.
return 0;
}
运行结果: