百科狗-知识改变命运!
--

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

乐乐1年前 (2023-12-03)阅读数 20#综合百科
文章标签区间表示

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

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

暴力拆解比较吃计算,查表法比较吃内存,虽然这两者对于当今的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倍,而且速度特别稳定。相对地,传统的拆解法碰上清一色这种同色牌多的牌型会变慢。

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

最后再贴一遍地址。

分组编码法,又称区间编码法,就是根据事物的特性和信息资料分组处理的要求,把具有一定位数的代码单元分成若干个组或者区间,每一组或区间的数字均代表一定意义,所有项目都有同样的数码个数。

例如,对消费者购买保险产品的意向调查,相关信息包括性别、职业、年龄、收入等,据此可以将资料分为4组,然后再编码。如首位用“1”表示年龄30岁以下,第二位用“1”表示工人,第三位用“1”表示月收入低于600元,这三位数字合起来“111”就表示30岁以下、月收入低于600元的工人。

举例说明什么是分组(区间)编码法-统计学之家

344就表示46~60岁之间的技术人员,月收入1500~2000元。这种方法容易记忆,处理起来简便,所以使用较为广泛,但有时也会因为位数过多而造成系统维护上的困难。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)