胡乐麻将有算法公式法吗如何找呢

先进算法当然有啊有详细的介紹,思路非常屌爆

大体意思如下(以下掺杂我的个人理解,可能有解释错误之处会日语的读者请尽量阅读链接原文):

暴力拆解比较吃计算,查表法比较吃内存虽然这两者对于当今的PC都不是问题,但如果平台机能特别有限可以采用改进的查表法。

基础的查表法是給每种牌编一个id,麻将中共34种牌因此需要至少6位空间手牌14张也就是84位。要保存和牌的全部组合约1700万种需要约175MB存储

改进的思路是先给手牌排序,然后不管具体牌面只计算连续牌的张数,得到一个「牌型」再从表中查牌型是否胡。

例如222456万345678饼北北可以编码为02(三张相同牌,三张连续牌六张连续牌,两张相同牌中间隔开)。

下一步是将其二进制化采用如下特制规则:

很容易看出,这样编码后每张牌呮占用1到2位空间最恶情况子下(十四张不连单牌)仅占用27位。跟之前的84位相比单组数据压缩了三分之二以上。更牛逼的是和牌表从1700萬种具体组合下降到仅仅9362种形状排列!


另外,作者反复强调:查表时需要大量整型比较运算将数据控制在32位以内对于(2008年成文当时主流嘚)32位CPU本身也是优化(省操作次数)。

结论上根据作者测试,优化后的查表算法比暴力拆解快大约50倍而且速度特别稳定。相对地传統的拆解法碰上清一色这种同色牌多的牌型会变慢。

还有一个是役的计算分为事后判定(先检查是否和牌、再检查役种)和事前判定(檢查和牌的同时检查役种)。文中的算法支持一部分役的事前判定

最后再贴一遍地址:。文末有全部源码(Java)

我要回帖

更多关于 求和公式 的文章

 

随机推荐