(麻将程序)对于和牌判断的是什么?

Python015

(麻将程序)对于和牌判断的是什么?,第1张

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

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

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

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

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

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

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

1→0

2→110

3→11110

4→1111110

10→10

20→1110

30→111110

40→11111110

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

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

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

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

最后再贴一遍地址。

人工智能python课程是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学课程。想学习人工智能python课程推荐选择【达内教育】。

人工智能就是写一个程序,像人那样去思考、判断、逻辑推理,来服务各行各业,相当于写个程序能模拟人那样去思考、判断。程序能像人那样总结经验,产生智慧,是社会生产力发展的主流变革方向,意义重大。人工智能学术上一般是这样说,人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。目前写人工智能程序的第一编程语言是【Python】,所以在人工智能课程中会讲Python编程。Python语言是一个编程工具。学会以后就快速的转到人工智能行业中做开发。感兴趣的话点击此处,免费学习一下

想了解更多有关人工智能python课程的相关信息,推荐咨询【达内教育】。作为国内IT培训的领导品牌,达内的每一名员工都以“帮助每一个学员成就梦想”为己任,也正因为达内人的执着与努力,达内已成功为社会输送了众多合格人才,为广大学子提供更多IT行业高薪机会,同时也为中国IT行业的发展做出了巨大的贡献。达内IT培训机构,试听名额限时抢购。