麻将查表法(1)

    xiaoxiao2022-07-02  122

    参考

    麻将程序对和牌判断的逻辑是什么?有比「暴力搜索」更先进的算法么? 日本解决方法(需要翻墙)

    题记

    开始优化麻将胡法,首先反应理论上查表是最快的,但是没有对查表使用的印象,于是看看有没有参考的,开始参考日本的查表,基本胡牌,再加上一些特殊胡牌方式,因为是日麻,百搭还有字成顺没有,那就先开始这个来先熟悉下查表法

    查表法

    思路很简单,也就是把所有可能全部列成表,一个key对应一个value,根据key来找所需要的值 在参考思路中key 代表牌的结构,value代表刻子,对子,顺子的位置,个数和其它特殊胡法 (其实难度就是怎么全部遍历出所有情况,不漏,不过参考中对key 防止大于32位 有特殊的处理,思路值得一看,ruby 生成表,java判断,不要问我怎么看懂ruby,就是硬啃)

    这个算是翻译?再加自己理解(不考虑百搭,字成顺)

    对于牌的定义及一些词的意思:

    颜色\值0x010x020x030x040x050x060x070x080x090x100x11/一万0x12/二万0x13/三万0x14/四万0x15/五万0x16/六万0x17/七万0x18/八万0x19/九万0x200x21/一筒0x22/二筒0x23/三筒0x24/四筒0x25/五筒0x26/六筒0x27/七筒0x28/八筒0x29/九筒0x300x31/一条0x32/二条0x33/三条0x34/四条0x35/五条0x36/六条0x37/七条0x38/八条0x39/九条0x400x41/东0x42/南0x43/西0x44/北0x45/中0x46/发0x47/白————

    牌型:能胡的牌数量的列表

    生成Key 1.1. 对手牌抽象成数字(不在乎其它信息,只注意牌的数量,要根据牌型生成key)  0x13,0x15,0x18,0x18,0x26,0x28,0x29,0x31,0x31,0x32,0x38,0x42,0x43,0x44 --> [1,1,2,1,1,1,2,1,1,1,1,1]  0x11,0x12,0x15,0x16,0x21,0x23,0x26,0x32,0x36,0x36,0x38,0x41,0x44,0x45 --> [1,1,1,1,1,1,1,1,2,1,1,1,1]

     如果把这个数据直接为key,那么会发现key的最大位数有14位,那么最起码要用uint64_t来存储,这个时候会浪费过多  的内存

    1.2.用0对不连续的数进行分割(方便找出所有胡牌可能)  0x13,0x15,0x18,0x18,0x26,0x28,0x29,0x31,0x31,0x32,0x38,0x42,0x43,0x44 --> [1,0,1,0,2,0,1,0,1,1,0,2,1,0,1,0,1,1,1]  0x11,0x12,0x15,0x16,0x21,0x23,0x26,0x32,0x36,0x36,0x38,0x41,0x44,0x45 --> [1,1,1,1,1,1,1,1,2,1,1,1,1]

    最新回复(0)