我写了一个递归的 Branch&Cut 算法,现在正试图加快执行速度。不过,我注意到一些非常奇怪的事情:有一次我调用了一个函数来计算一些向量的向量。使用clock(),我测量了在调用它的文件以及函数本身中花费在这个函数上的时间。可视化:
tic
foo(args);
time1 = toc
和
void foo(args) {
tic
//do stuff
time2 = toc
}
我的问题是 time1 大约是 time2 的 3 倍,这对我来说根本没有意义。实际的函数有很多参数,如下所示:
void allcomb( std::vector<int> &Vin,
std::vector<int> &Vprev,
Graph F,
int t,
const int n,
const int numofdests,
int Time_hor,
std::vector<int> &truckdest,
std::vector<int> &truck_dest_index,
std::vector<int> &descroflabel,
std::vector<int> &labelofdescr,
std::vector<std::vector<double> > &short_path_time,
std::vector<std::vector<double> > &short_path_fuel,
double eta,
std::vector<std::pair<int,int> >& next_hub,
std::vector<std::pair<double,double> >& distanceto_next_hub,
std::vector<std::vector<int> >& Choices )
我通过引用传递所有向量以避免复制它们,但也许我遗漏了什么?还是经常调用具有这么多参数的函数通常很慢?另外,进入函数比退出函数花费更多的时间,也许这很重要。
如果您需要更多信息,请告诉我。谢谢和欢呼,克里斯托夫
boost Graph 对象是问题所在,感谢您发现它 :) 运行时间降低了 10 倍,完美!