1

考えられるすべてのエッジを考慮し、ファイルに追加するエッジをランダムに選択することでランダム グラフを生成する単純なコードがあります (パラメーター 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 に戻す以外に何ができますか?

ありがとう。

4

0 に答える 0