std::list
現在、Fisher-Yates shuffle を使用してランダム化しています ( http://en.wikipedia.org/wiki/Fisher-Yates_shuffleを参照)。要約すると、私のコードはリストの次の手順を実行します。
- の各要素をループします
list
。 - 要素を、それ自体を含め、現在の位置からランダムに選択された要素と交換します。
リストはランダム アクセスを提供しないため、これは、ステップ 1 でリスト全体を反復処理していることを意味し、要素ごとに、平均してその時点以降の残りの要素の半分を反復処理しています。これは、私のプログラムのパフォーマンスにおける大きなボトルネックであるため、改善を検討しています。list
他の理由で、コンテナーとして引き続き使用する必要がありますvector
が、ランダム化関数の開始時に に変換list
し、最後に に戻すことを検討しています。私のリストには通常 300 ~ 400 個のアイテムが含まれているため、アイテムを順番にトラバースすることを避けるために、コンテナー間の変換コストに見合うだけの価値があると思います。
私の質問は、これがコードを最適化する最良の方法のように思えますか? より良い方法はありますか?