0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

物理カードを有名アルゴリズムでシャッフル……は実用性が微妙

0
Posted at

コンピュータで配列をシャッフルする際は、以下のアルゴリズムで行えることが知られている。

  1. 「シャッフル結果の配列」を空で初期化する
  2. 「シャッフル対象の配列」から要素をランダムに1個選ぶ
  3. 選んだ要素を「シャッフル対象の配列」から消し、「シャッフル結果の配列」の最後に追加する
  4. 「シャッフル対象の配列」が空になるまで、2以降を繰り返す

フィッシャー–イェーツのシャッフル - Wikipedia

ところで、物理カードゲームにおいては、カードをシャッフルする前に規則性のある形に並べ替える行為を明示的に禁止するルールを設定している所がある。

一方、この行為を明示的に許可するルールを設定している所もある。

有名アルゴリズムで偏りがないシャッフルをしてしまえば、シャッフル後の配置はシャッフル前の配置によらなくなり、シャッフル前の配置をどうでもよくできるのではないか……?

物理カードを有名アルゴリズムでシャッフル

このアルゴリズムを物理カードに適用しようとすると、以下のようになるだろう。

  1. シャッフルするカード一式を裏向きにし、1枚ずつの存在が見やすいように並べる
  2. その中から適当な1枚を取り、シャッフル結果を置く場所に (既にカードを置いている場合は、その上に) 置く
  3. シャッフルするカードが無くなるまで、2以降を繰り返す

簡単だね!なんだ、物理カードでもできるじゃん!やろう!
……と言いたいところだが、これには以下のような問題があるだろう。

この手法の問題点

人間の乱数発生力には限界がある

「ランダムな」選択が本当にランダムであれば、このアルゴリズムは有効である。
しかし、人間は無意識に偏りを減らそうとするなどしがちであり、本当にランダムに選択するのは難しい。
さらに、自分で選択すると、ランダムに選択するふりをして自分の欲しい配置にできてしまうかもしれない。
すると、シャッフルどころか完全に真っ黒な積み込みになってしまうだろう。

配置がわかってしまう

人間がランダムに選択するのが難しいなら、選択しなければいい。
ダイスやコンピュータなどを用いてランダムに選択し、人間はその結果に従ってカードを動かすだけ、としたらいいのではないか?

しかし、これではどのカードをどこに置くかの情報が人間に伝わってしまい、シャッフル後はわからないはずのカードの位置がわかってしまう。
全部のカードを覚えるのは難しくても、数枚でも覚えておけばその分 (不正に) 有利になってしまうだろう。

長時間かかる

そもそも、カードを1枚ずつ動かす並べ替えには長時間かかってしまう。
このやり方は、n個の山を使ってのディールシャッフル (n = シャッフルするカードの枚数) とみなすことができそうだ。
ディールシャッフルは長時間かかり、回数が制限される場合もある並べ替えなので、このやり方も不当に長時間かかると考えられる。

餅は餅屋

コンピュータ上でシャッフルを行うのに有効とされる有名なアルゴリズムでも、そのまま物理カードに適用しようとすると問題がありうることがわかった。

カードゲームでよく用いられるヒンズーシャッフル (カードの山から適当な部分を抜いて、一番上に置く) や、ファローシャッフル (カードの山を半分くらいに分け、適当にマージする) を適切な回数繰り返すことで、統計的に適切なシャッフルになるらしい。
やはり対象の性質に応じて適したやりかたとそうでないやり方がある、ということだ。

あとがき

今回の記事、技術的な話が全くと言っていいほど無い気がする……Qiitaじゃなくてnoteでやれ案件か……?
ごめんね……自分の頭が悪いからスケジューリングが下手くそで役立ちそうな記事を書く時間が取れず、短時間で書けそうないいネタも思いつけず、それでも毎週投稿にこだわった結果、怪しい記事を出す結果になってしまい……

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?