考えられるすべてのエッジを考慮し、ファイルに追加するエッジをランダムに選択することでランダム グラフを生成する単純なコードがあります (パラメーター p - 各エッジが追加される可能性に基づいて)。アルゴリズムは次のようになります。
for (unsigned int i = 0; i < nodeCount; ++i)
{
for (unsigned int j = i+1; j < nodeCount; ++j)
{
uniform_int_distribution<> d(0, 999999);
int randNum = d(randEngine);
if (randNum < p * 1000000)
{
//code that adds the edge to the file
}
}
}
私は vs2010 でこのコードをコンパイルしていましたが、50000 ノードで p=0.00002 のグラフを作成すると、約 26 秒かかりました。vs2012 にアップグレードしてコンパイルしたところ、74 秒ほどかかりました。約3倍の時間!
動作が遅い部分を切り分けてみました - 乱数生成のようです (上記に含まれていない、ファイルに書き込むコードをコメントアウトし、同じ時間を記録しました)。
プロジェクトの定義はまったく同じです (プラットフォームを除いて - vs100 と vs. vs110)。VS2012で乱数ジェネレーターが非常に悪化した理由は何ですか?? それとも何か悪いことをしているのは私ですか?
いずれにせよ、vs2010 に戻す以外に何ができますか?
ありがとう。