問題
さまざまなタイプの N 個のアイテムが、タイプごとに決定される独自のバケットに均等に分散されています。次のような新しいリストを作成したい:
- 各バケットからランダムに選択
- 同じバケットから 2 回続けてピックしない
- 各バケットは、(可能であれば)最終的なリストに等しい量の表現を持たなければなりません
- 言語固有のライブラリを使用しない (別の言語で簡単に実装できない)
例
4 つの異なるタイプの 12 のアイテムがあります。つまり、4 つのバケットがあります。
Bucket A - [a, a, a]
Bucket B - [b, b, b]
Bucket C - [c, c, c]
Bucket D - [d, d, d]
私が欲しいもの
1 から N の間のサイズで繰り返される文字のない、ランダムに分布した上記の項目のリスト。
12 Items: a, d, c, a, b, a, c, d, c, b, d, b
8 Items: c, a, d, a, b, d, c, b
4 Items: c, b, d, a
3 Items: b, c, a (Skipping D)
次のバケットが以前に使用されたバケットと等しくなくなるまでランダムな整数を生成する while ループでこれを実行しようとしていましたが、それは非効率的であり、他の誰かがこの問題を解決するためのより良いアルゴリズムを持っていることを望んでいました.