あらの(一人)麻雀研究所

テーブルを使った高速化

これは、あらかじめ最適な面子・面子候補の選び方を求めておき、それをテーブルとして保存しておこうという考え方です。考えられるすべてのパターンについて計算を行っておけば、実行時には単にテーブルの検索を行うだけで最適な選び方が分かることになります。

この方法で実装を行う場合、気になるのは全パターンが何通りになるのかということです。これが天文学的な数字であれば、それらをすべてメモリ上にとっておくことは不可能だからです。

まずは、どのくらいの数字になるのか簡単に見積もってみましょう。

数牌は9種類で、それぞれの牌を0枚から4枚持っている可能性があります。そこで、単純に5の9乗を計算してみると、1,953,125という数字が出てきます。たいして大きな数字ではありません。

もちろん、実際には手牌は14枚が最大ですので、これによってパターン数はずいぶんと減ります。

さらに、すでに述べた通り孤立牌については考える必要がありませんので、もっと減ることになります。

下の表は、この組み合わせ数を実際に計算した結果です。

枚数 組合せ数 孤立牌なし
1 9 0
2 45 24
3 165 63
4 495 258
5 1278 774
6 2922 2012
7 6030 4546
8 11385 9218
9 19855 16954
10 32211 28640
11 48879 44795
12 69675 65331
13 93600 89292
14 118800 114821

 ご覧の通り、14枚の組み合わせであっても、そのパターン数は10万程度です。1枚から14枚までの合計パターン数は376,728通り。

これらについての最適な面子選択方法を計算しておけば良いのです。

一人麻雀練習機においては実際にこの方法で向聴数を求めており、その際に使っているテーブルも配布しています。このテーブルを使うことで、割と手軽に向聴数を求めることが出来ますので、必要な方は使って見てください。

このファイルの中には、例えば次のように書かれています。

1023201 2013

左側の数字が手牌の内容を、右側の数字がA,Bそれぞれの場合の面子・面子候補の数を示しています。

1023201というのは、各数牌を何枚ずつ持っているのかを表したものです。余計な0は省略されていますので、それを補完すると、

001023201

となり、

という手を示していることになります。

右側の数字は、1000の位がBの場合の面子の数、100の位がBの場合の面子候補の数、10の位がAの場合の面子の数、1の位がAの場合の面子候補の数です。

 

前へ  次へ


Copyright 2006-2019  あらの(一人)麻雀研究所

All rights reserved.   あら ( ara999 あっと gmail.com )