n
要素を含むベクトルを持っています。私は、反復せずにベクトルからランダムにm
要素のサブセットを選択する必要があります。これを行う最も効率的な方法は何ですか?私は自分のコードでこれを何千回も実行する必要があります。n個の要素を含むベクトルからm個の要素をランダムに選択します。
rand()
を使用して、0
とn
の間の乱数k
を生成することです。次にベクトルのk
番目の要素を選択し、std::set
に挿入します。セットのサイズがm
に等しくなるまでこれを続けます。私は今セットがn
要素のセットから無作為に選ばれたm
のユニークな要素を含んでいることを保証しています。
その他の解決策はありますか?
ありがとうございました。
'STDの操作を行います。 :random_shuffle() 'を呼び出し、最初に' m'要素を取り出します。 – jrok
@jrok:シンプルでは、 'm'が' n'よりずっと小さいときは非常に非効率です。 –
[単一のランダムな値の組み合わせを選択するアルゴリズムの可能な重複?](http://stackoverflow.com/questions/2394246/algorithm-to-select-a-single-random-combination-of-values) –