我这段代码运行,NEH_EvaluateP7函数中使用c数组 int Depart[500][21]程序运行只要4s多时间,可如果使用vector的话,需要18s多CPU时间,为什么二者相差这么大?有没有高人解释下。另怎么用vector定义Depart,使得程序也只需要数秒钟实现。
#include <vector>
#include <ctime>
#include <iomanip>
#include <iostream>
using namespace std;
struct individual//实际编码结构
{
vector <int> permutation;
int value;
};
const int product=500;
const int machine=20;
vector< vector<int> > Time(500,vector<int> (20));
int NEH_EvaluateP7(vector<int>& A, int size);
void NEH(individual& ind);
int main()
{
int i;
individual temp_individual;
vector <int> CC(product);
for(i=0;i<product;++i)
CC[i]=i+1;
temp_individual.permutation=CC;
clock_t start,finish;//计算程序开始结束时间
double totaltime;
start=clock();
NEH(temp_individual);
finish=clock();
totaltime=static_cast <double>(finish-start)/CLOCKS_PER_SEC;
cout<<showpoint<<fixed<<setprecision(6)<<totaltime<<" sec"<<endl;
return 0;
}
int NEH_EvaluateP7(vector<int>& A, int size)
{
int i,j;
int cmax;
int Depart[500][21];
//vector< vector<int> > Depart(500,vector<int> (21));
Depart[0][0]=0;
for(i=1;i<=machine;i++)
Depart[0][i]=Depart[0][i-1]+Time.at(A[0]-1).at(i-1);
for(i=1;i<size;i++)
{
Depart[i][0]=Depart[i-1][1];
for(j=1;j<machine;j++)
Depart[i][j]=max(Depart[i][j-1]+Time.at(A[i]-1).at(j-1),Depart[i-1][j+1]);
Depart[i][machine]=Depart[i][machine-1]+Time.at(A[i]-1).at(machine-1);
}
cmax=Depart[size-1][machine];
for(i=0;i<size-1;i++)
cmax+=Depart[i][machine];
return cmax;
}
void NEH(individual& ind)
{
int i,j,k;
int cmax,cmax2;
vector<int> B(product),C(product),D(product);
B[0]=ind.permutation.at(0);
B[1]=ind.permutation.at(1);
C[0]=ind.permutation.at(1);
C[1]=ind.permutation.at(0);
if( NEH_EvaluateP7(B,2)>NEH_EvaluateP7(C,2) )
{
B=C;
}
for(i=2;i<product;i++)
{
D=B;
cmax=100000000;
for(j=0;j<=i;j++)
{
C=D;
for(k=i;k>j;k--)
C[k]=C[k-1];
C[j]=ind.permutation.at(i);
cmax2=NEH_EvaluateP7(C,i+1);
if( cmax>=cmax2 )
{
B=C;
cmax=cmax2;
}
}
}
ind.permutation=B;
ind.value=cmax;
} |