計算時間
一人麻雀練習機では、ここに示したアルゴリズムで向聴数を求めているのですが、その計算時間を参考までに示しておきます。
測定方法ですが、一人麻雀練習機のノーマルモード、チンイツモード、ホンイツモード、国士モードのそれぞれを用いて配牌を10,000
通り生成し、その向聴数を求めるためにかかった時間を測定しました。
各モードにおける計算時間は下記の通りです。
ノーマルモード 0.0407 秒 ホンイツモード 0.0438 秒 チンイツモード 0.0625 秒
国士モード 0.0375 秒
CPUはPentium4の3GHz程度のものを使っています。また、テーブルの検索にはstlのmapを用いています。
一万回の計算時間が平均で0.1秒以下ですので、一回あたり0.00001秒ということになります。十分高速だと言えるでしょう。
ちなみに、上の結果はVisual C++ 6.0でのものですが、Visual Studio
2008のC++コンパイラでも同じことをやった結果、以下のようになりました。
ノーマルモード 0.0265 秒 ホンイツモード 0.0313 秒 チンイツモード 0.0485 秒
国士モード 0.0266 秒
これを見ると、すべての場合において3割程度高速になっています。詳細な検討はしていないので断言できませんが、VS2008のC++コンパイラは、VC++6.0のものよりかなり高速なコードを生成できるようです。
以上で向聴数の求め方の解説は終わりです。
練習問題
上に示した計算を行ったときに用いた手牌と、向聴数の計算結果を載せておきます。
自分で向聴数計算プログラムを作った場合の練習問題として使ってください。
● 向聴数問題集
zipファイルの中には四つのファイルが入っており、それぞれ、普通の手、ホンイツ、チンイツ、国士の手牌になっています。問題数は各一万問です。
各ファイルの中には、
2 4 8 10 14 15 18 20 22 22 25 30 31 32 4 8 5
のような形式でデータが入っています。
左の14個の数字が手牌の情報を、その右の三つの数字が向聴数を表しています。
牌の番号は、一万が0、二万が1、…、中が33となっています。
向聴数については、左から、一般手としての向聴数、国士への向聴数、七対子への向聴数となっています。
前へ
|