1. ホーム
  2. c#

[解決済み] C#でList<T>からN個のランダムな要素を選択する

2022-04-15 07:24:23

質問

一般的なリストから5つのランダムな要素を選択する素早いアルゴリズムが必要です。例えば、私は、5つのランダムな要素を List<string> .

解決方法は?

繰り返し処理を行い、各要素について、選択される確率=(必要数)/(残り数)とする。

つまり、40個のアイテムがあった場合、最初のアイテムが選択される確率は5/40となります。もしそうなら、次は4/39の確率で、そうでなければ5/39の確率で選ばれます。最後まで行くと、5つのアイテムが揃うことになりますが、多くの場合、その前にすべてのアイテムが揃っているはずです。

この技法は セレクションサンプリング の特殊なケースです。 リザーバーサンプリング . 入力のシャッフルに似た性能ですが、もちろん元のデータを変更することなくサンプルを生成することができます。