4

私はポーカー関連のトピックを使ってプログラミングの概念を始めることを教えることを目的とした多くの記事を書いています。現在、シャッフルのテーマに取り組んでいます。

Jeff AtwoodがCodingHorror.comで指摘しているように、1つの単純なシャッフル方法(配列を繰り返し、各カードを配列内の他の場所のランダムなカードと交換する)は、順列の不均一な分布を作成します。実際のアプリケーションでは、より均一なランダム性のためにKnuthFisher-Yatesシャッフルを使用します。しかし、私は、プログラミングの概念の説明を、はるかにコーダーに適さないアルゴリズムで行き詰まらせたくありません。

これは質問につながります:あなたが52枚のカードのデッキの素朴なシャッフルを使用していることを彼らが知っていたら、ブラックハットはどれだけの利点を持っているでしょうか?非常に小さいようです。

4

6 に答える 6

14

クヌース シャッフルは、ナイーブ シャッフルに比べて取るに足らない変更です。デッキ全体のどこかではなく、デッキの残りの (シャッフルされていない) セクションの任意のカードと交換するだけです。残りの未選択カードから順番に次のカードを選択することを繰り返すと考えると、これもかなり直感的です。

個人的には、適切なアルゴリズムがそれほど複雑ではない (そして視覚化するのが簡単な!) 場合に、貧弱なアルゴリズムを学生に教えるのは悪いアプローチだと思います。

于 2008-09-18T21:20:19.380 に答える
6

利点は非常に重要であることがわかります。 この記事をチェックしてください

問題の一部は欠陥のあるアルゴリズムですが、別の部分は、コンピューターから「乱数」を取得できるという仮定です。

于 2008-09-18T20:57:14.287 に答える
3

シャッフルの単純で公平なアルゴリズムは、デッキ内の各カードにランダムな浮動小数点数 (0 から 1 の間など) を割り当て、割り当てられた番号でデッキをソートすることです。

これは実際、何かが直感的であるからといって、私たちの場合の素朴なシャッフルが正しいとは限らないことを学生が理解するための完璧な例です.

于 2008-09-18T21:09:00.437 に答える
1

余談ですが、シャッフルのシミュレーションに関して ITtoolbox にシャッフルに関するブログ投稿がありました。

あなたの質問に関しては、52 あると考えてください! ジェフの 3 枚のカード デッキの例のように、物事が着地する場所で役割を果たす可能性のあるデッキ構成から始めることができます。また、アドバンテージがどこにあるのかが明らかになる前に、数千の例が必要になるだろうと彼は言っていることに注意してください。配られたカードを一番下に置き、シャッフルしますが、これは繰り返される可能性は低いと思います。

于 2008-09-18T21:13:42.003 に答える
0

実際のオンラインギャンブルサイトで使用されるポーカープログラムを書いているわけではありません。あなたが人々にプログラムの仕方を教えているとき、誰かがプログラムでカンニングする能力は大したことではありません。

これは現実世界の貧弱なモデルであるというメモを残し(セキュリティ上の欠陥の可能性があるとして参照してください)、そのまま教え続けてください。

于 2008-09-18T20:59:27.777 に答える
-1

主観的。

非常に小さいようです。

同意。

于 2008-09-18T20:54:57.227 に答える