少女祈祷中...

做monte carlo很需要计算机的速度,除了寻找算法上的绝对优势之外,在代码上还能够有什么改进?结果显而易见。

预留空间+刷新整个动态数组需要67毫秒...

预留空间+刷新二维动态数组需要142毫秒...

1
构造改进版连续存储二维动态数组需要140毫秒...

11
vector初始化用掉1毫秒...

vector用resize来预留空间需要74毫秒...

5000000
vector如果用pushback需要2707毫秒...

5000000
刷新这个vector里面的所有值需要443毫秒...

使用vector的vector来pushback构造多维数组需要13131毫秒...

一个使用pair类型的vector来pushback需要12845毫秒...

#include <vector>
#include <ctime>
#include <iostream>
#include <fstream>
using namespace std;
 
 
void main(){
	ofstream flux("haaaaaaa.txt");
	double start, finish, duration;
	int N;
	int n;
	N=5000000;
	n=2;
 
 
	start   =   clock();
	double *temp= new double[N];
	for(int i=0;i<N;i++){
		temp[i]=99;
	}
	finish   =   clock();  
	duration   =   (double)(finish   -   start); 
	flux<<"预留空间+刷新整个动态数组需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl;
 
	start   =   clock();
	double **temp1= new double *[n];
	for(int i=0;i<n;i++){
		temp1[i] = new double [N];
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<N;j++){
			temp1[i][j]=1;
		}
	}
	finish   =   clock();  
	duration   =   (double)(finish   -   start); 
	flux<<"预留空间+刷新二维动态数组需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl;
	flux<<temp1[1][100]<<endl;
 
	start   =   clock();
	double **temp2=new double *[n];
	temp2[0]= new double [N*n];
	for(int i=1;i<n;i++){
		temp2[i]=temp2[i-1]+N;
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<N;j++){
			temp2[i][j]=11;
		}
	}
	finish   =   clock();  
	duration   =   (double)(finish   -   start); 
	flux<<"构造改进版连续存储二维动态数组需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl;
	flux<<temp2[1][100]<<endl;
 
 
	start	=clock();
	vector<double> test;
	vector<pair<double,double>> test2;
	vector<vector<double>> test3;
	finish =clock();
	duration   =   (double)(finish   -   start); 
	flux<<"vector初始化用掉"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl;
 
	start   =   clock();
	test.resize(N,1);
	finish   =   clock();  
	duration   =   (double)(finish   -   start); 
	flux<<"vector用resize来预留空间需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl;
	flux<<test.size()<<endl;
	test.clear();
 
	start   =   clock();
	for(int i=0;i<N;i++){
		test.push_back(1);
	}
	finish   =   clock();  
	duration   =   (double)(finish   -   start); 
	flux<<"vector如果用pushback需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl;
	flux<<test.size()<<endl;
	//test.clear();
 
	start   =   clock();
	for(int i=0;i<N;i++){
		test[i]=99;
	}
	finish   =   clock();  
	duration   =   (double)(finish   -   start); 
	flux<<"刷新这个vector里面的所有值需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl;
	test.clear();
 
	start   =   clock();
	for(int i=0;i<n;i++){
		for(int j=0;j<N;j++){
			test.push_back(99);
		}
		test3.push_back(test);
		test.clear();
	}
	finish   =   clock();  
	duration   =   (double)(finish   -   start); 
	flux<<"使用vector的vector来pushback构造多维数组需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl;
	test.clear();
 
 
 
	start   =   clock();
	for(int i=0;i<N;i++){
		test2.push_back(make_pair(1,1));
	}
	finish   =   clock();  
	duration   =   (double)(finish   -   start); 
	flux<<"一个使用pair类型的vector来pushback需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl;
 
 
 
	delete [] temp;
	for(int i=0;i<n;i++){
		delete [] temp1[i];
	}
	delete [] temp1;
	delete [] temp2[0];
	delete [] temp2;
	flux.close();
 
 
	char wengding;
	cin>>wengding;
 
};

: http://www.deuxmille.org/archives/1546

本文相关评论 - 仅仅只有一条评论
2010-10-15 19:56:14

太笨了 这文章 呵呵

  • :em14:
  • :em04:
  • :em11:
  • :em32:
  • :em08:
  • :em05:
  • :em17:
  • :em19:
  • :em24:
  • :em00:
  • :em31:
  • :em33:
  • :em06:
  • :em26:
  • :em27:
  • :em03:
  • :em28:
  • :em30:
  • :em13:
  • :em23:
  • :em21:
  • :em16:
  • :em20:
  • :em15:
  • :em07:
  • :em29:
  • :em02:
  • :em12:
  • :em18:
  • :em10:
  • :em01:
  • :em09:
  • :em22:
  • :em25:

Additional comments powered by BackType