12

C++プログラム用のDeckクラスを作成しています。2つの方法が必要です。1つはデッキの一番上からカードをポップする方法、もう1つはデッキをシャッフルする方法です。私は後者に関心があります。

カードは1から52までの整数で表されます。デッキをシャッフルするための最速のアルゴリズムは何ですか(「良い」レベルのランダム性を想定)?

4

3 に答える 3

26

自分でシャッフルを実装したい場合は、非常に単純ですが機能的なシャッフルアルゴリズムである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>

于 2010-11-02T06:39:58.230 に答える
8

std::random_shuffleデッキをシャッフル するために使用します。

于 2010-11-02T06:40:31.763 に答える
4

std :: random_shuffle

http://www.cplusplus.com/reference/algorithm/random_shuffle/

于 2010-11-02T06:40:23.110 に答える