C++プログラム用のDeckクラスを作成しています。2つの方法が必要です。1つはデッキの一番上からカードをポップする方法、もう1つはデッキをシャッフルする方法です。私は後者に関心があります。
カードは1から52までの整数で表されます。デッキをシャッフルするための最速のアルゴリズムは何ですか(「良い」レベルのランダム性を想定)?
自分でシャッフルを実装したい場合は、非常に単純ですが機能的なシャッフルアルゴリズムであるFisher–Yatesシャッフルです。
n個の要素の配列をシャッフルするには:
for i from n − 1 downto 1 do j ← random integer with 0 ≤ j ≤ i exchange a[j] and a[i]
もちろん、C ++標準ライブラリには、ヘッダーstd::random_shuffle
を介して含まれるなど、このような実装も含まれています。<algorithm>
std::random_shuffle
デッキをシャッフル するために使用します。
std :: random_shuffle
http://www.cplusplus.com/reference/algorithm/random_shuffle/