私は再帰的な 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 )
コピーを避けるためにすべてのベクトルを参照で渡しますが、何か不足している可能性がありますか? それとも、それほど多くの引数を持つ関数を頻繁に呼び出すのは一般的に遅いのでしょうか? また、関数に入ると、終了するよりも時間がかかります。これは重要なことかもしれません。
さらに情報が必要な場合は、教えてください。ありがとう、クリストフ
ブースト グラフ オブジェクトが問題でした。見つけてくれてありがとう :) 実行時間が 10 分の 1 に短縮されました。完璧です。