找回密码
 欢迎注册
查看: 72|回复: 3

[擂台] 一色麻将天和与地听的概率

[复制链接]
发表于 前天 04:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
本人是立直麻将(又称日本麻将)的爱好者,最近偶然发现一个网页提供一个简化版麻将小游戏,只跟电脑1v1对弈,而且只用上36张索子牌,双方各拿13张牌然后轮流摸剩余的10张牌决胜负。以下是一张截图:
_bm_.jpg

大致规则就是开始时双方各有十万分,每次胡出的一方从对方赢取一定分数,然后继续下一把,直至某一方负分为止。
分数是庄家(先摸牌的一方)能赢18000(6-7番跳满)、24000(8-10番倍满)、36000(11-12番三倍满),48000(13+番累计役满),以及某些自动役满牌型(后述)或其复合的两倍或三倍役满(48000、96000、144000),而闲家则只能赢庄家分数的2/3,即12000、16000、24000、32000、64000、96000等。每次胡牌的一方在下一把自动成为庄家。
(注意这个游戏里不许吃碰和明杠,但是可以开暗杠然后多摸一张牌。)
(另外这个游戏有个彩蛋就是在双方暗牌的一局玩家击败电脑之后,下一局玩家能看到电脑的手牌,能让玩家感受一下赌圣的乐趣。)

例如上图中我庄家开局胡出了【天和+九连宝灯】复合的两倍役满,所以赢了对方96000分,下一把变成我有196000分,电脑只剩下4000分。(当然那把我胡了18000直接KO了电脑。)

言归正传,发此帖子目的是感觉这个模式下挺容易出现【天和】(庄家起手自摸胡出)、【人和】(庄家打出的第一张牌正好被闲家胡出)、【地和】(闲家起手自摸胡出)。甚至经常出现连续三把【天和】或闲家一把【人和】或【地和】之后连续两把【天和】秒杀对手的情况。所以想看看有没有大神能计算一下这种【一色麻将】规则下【天和】(庄家起手抽14张牌直接胡出)与【地听】(闲家起手抽13张牌而听牌,即加上某张牌就能胡出,所以有【人和】或【地和】的机会)的概率。

另外有必要阐明一下(虽然对华人应该是常识),麻将里的所谓【胡牌】就是十四张牌形成四组面子(三张相同牌组成的刻子或三连数字牌组成的顺子)加上一对相同的牌组成的雀头,例如我上图的那把【九连宝灯】,如果把数字列出来是【11122345678999】,那么雀头就是【22】,而四组面子分别是【111+345+678+999】。除此之外,因为这是日本立直麻将,所以它允许另外一种胡法【七对子】,算作2番,就是14张牌正好形成七组不重复的对子,即使它不能组成传统的【四面子+雀头】的牌型(例如【11224455668899】)。当然也有同时符合两者的例子,例如【11223355667799】,它可以分割为【123+123+567+567+99】的传统牌型,称为【二杯口】,算作3番。
(所谓【杯口】就是两组相同顺子的合称,例如【112233】,如果胡出的牌里只有一个【杯口】那就是【一杯口】,算作1番。【二杯口】则强制要求四组不重叠的两对相同顺子,例如【11112233778899】或【11112222333399】。)
(也有不少其他的番种和役满的牌型,以后有空再慢慢详述补充。)

当然常规允许吃碰的麻将对胡牌定义有更复杂的考虑(例如明刻、暗刻),但是因为这里只计算【天和、人和、地和】的概率,所以默认14、13张牌都是双方手里的暗牌(甚至不能暗杠,因为立直麻将规定暗杠了之后【天和、人和、地和】都不成立)。

说得太多又跑题了,总而言之就是想看看有没有对麻将游戏有兴趣的大神们能编程计算一下这【一色麻将】36张牌的简化规则下起手就胡牌或听牌的概率。本人也有一点点头绪,但是目前没有条件投入太多时间精力在这个编程工作上。这几天有时间的话希望能在这课题上多分享一下各种资料、心得!

评分

参与人数 1威望 +2 金币 +2 贡献 +2 鲜花 +2 收起 理由
magicstrawberry + 2 + 2 + 2 + 2

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 前天 18:10 | 显示全部楼层
趁今天还有点时间,发一下早前在这课题上研究的一点点理论基础:

首先既然是计算概率,那么当然必须应用上【组合数学】。最基本就是从36张牌抽取14、13张牌的【组合数量】,分别是【C(36,14) = 36! / 22!14!】和【C(36,13) = 36! / 23!13!】:

C(36,14) = 36! / 22!14! = 3796297200
C(36,13) = 36! / 23!13! = 2310789600

下一个概念是【牌型】,也就是14或13张牌组成的手牌。因为这里只用上索子牌,所以完全可以用数字【1】至【9】表达每一张牌,也就是每个牌型都是长度13或14的一个字串,例如:

【11122345678999】:我在一楼图胡出那把天胡九连宝灯的14张牌牌型
【2233445667788】:这个13张牌牌型三面听(叫听三种牌)2、5、8索,如果胡5索的话就是【二杯口】的胡牌牌型

为规范表达每次列出牌型时都把所有牌从小到大排序,即1排在最左面,9排在最右面(这也是游戏里玩家手牌的排列方式)。

注意每一种牌型都有不同的组合数量,因为如果某张牌只出现了【1、2、3】次,那么就分别有【C(4,1)、C(4,2)、C(4,3)】=【4、6、4】种不同的抽取方式。把某个牌型所有牌的抽取方式相乘,就是这个牌型的【复合倍数】。例如:

【11122345678999】的【复合倍数】是6(【2】出现2次)乘以4^8(其余八个数字各出现1或3次)即【6*4^8 = 393216】
【2233445667788】的【复合倍数】是6^6(【234678】各出现2次)乘以4(【5】出现1次)即【6^6*4 = 186624】

也就是说,随机抽取14张牌出现【11122345678999】的概率是【393216/3796297200 ≈ 0.010358%】即大约1/9654,随机抽取13张牌出现【2233445667788】的概率是【186624/2310789600 ≈ 0.008076%】即大约1/12382。

最后一个概念是【结构】,就是不考虑某种牌型牌上的个别数字,单纯把它每张牌的出现次数从大到小排序,例如:

【11122345678999】的【结构】是【332111111】(有两种牌各出现3次,一种牌出现2次,六种牌各出现1次)
【2233445667788】的【结构】是【222222100】(有六种牌各出现2次,一种牌出现1次,两种牌各出现0次)

易知每个【结构】必定是一个长度9的字串,而且这个字串只能用上【0、1、2、3、4】这五种数值,而这些数值的总和就是该副手牌的数量(这里只会是13或14)。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 昨天 01:48 | 显示全部楼层
本帖最后由 毒酒滴冻鸭 于 2026-5-12 02:22 编辑

接续楼上的理论研究:利用【结构】、【复合倍数】、【牌型】、【组合数量】这些概念,可以有系统地穷举、统计和核对13、14张牌的牌型数量。

首先统计某个结构里【4、3、2、1、0】的数量,定义为【s4、s3、s2、s1、s0】(如此必有【s4+s3+s2+s1+s0 = 9】,而【4s4+3s3+2s2+s1】则是这个结构的牌型共有多少张牌)。

那么对于符合这个结构的所有牌型,其【复合倍数】也很容易算出来:【C(4,4)^s4 * C(4,3)^s3 * C(4,2)^s2 * C(4,1)^s1 * C(4,0)^s0 = 4^(s3+s1) * 6^s2】

下一步就是如何统计符合这个结构的所有牌型数量。已知所有这些牌型都有:s4种牌各出现4次、s3种牌各出现3次、s2种牌各出现2次、s1种牌各出现1次、s0种牌各出现0次。

那么要穷举出这个结构的所有牌型,就要把【123456789】这9种牌值分配给长度分别为【s4、s3、s2、s1、s0】的五个集。

如此这种分配方式的组合数量必定是【9! / s4!s3!s2!s1!s0!】,这也就是这个结构下的【牌型数量】。把这个【牌型数量】乘以【复合倍数】,就是符合这个结构的所有牌型能出现的【组合数量】。

至此所有穷举工具都准备完成,接下来的工作就是只要把13、14张牌的所有有可能的【结构】都分别穷举出来,便能通算出每个结构的【复合倍数】、【牌型数量】和【组合数量】,这个用Excel之类的试算表可以轻松完成。

最后的最后,把所有【结构】产生的【组合数量】全部相加,看看跟【C(36,13)】或【C(36,14)】是否吻合就能核实穷举【结构】的过程是否有错漏。

这里先算一下13张牌,合共有32种【结构】,列成下表,统算出【牌型数量】总数为【93600】、【组合数量】总数为【2310789600 = C(36,13)】,结果吻合!

mj13.jpg
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 昨天 02:20 | 显示全部楼层
再来算一下14张牌,合共有36种【结构】,列成下表,统算出【牌型数量】总数为【118800】、【组合数量】总数为【3796297200 = C(36,14)】,结果吻合!

mj14.jpg

这里两个【组合数量】总数都成功核实了,那么两个【牌型数量】总数【93600】和【118800】,是否也能核实呢?

答案是肯定的:因为所谓【牌型】,就是【123456789】这九种牌值各自分别出现【4、3、2、1、0】次所组成的一个现象,而统算这类现象的一种很直观的方法,就是把【(n^4 + n^3 + n^2 + n + 1)^9】乘开,再观察每个n^k的系数。

这里懒得手做了,用【dcode.fr】之类的网页工具运行一下,得出:

(n^4 + n^3 + n^2 + n + 1)^9 =
n^36 + 9n^35 + 45n^34 + 165n^33 + 495n^32 + 1278n^31 + 2922n^30 + 6030n^29 + 11385n^28 + 19855n^27 + 32211n^26 + 48879n^25 + 69675n^24 + 93600n^23 + 118800n^22 + 142740n^21 + 162585n^20 + 175725n^19 + 180325n^18 + 175725n^17 + 162585n^16 + 142740n^15 + 118800n^14 + 93600n^13 + 69675n^12 + 48879n^11 + 32211n^10 + 19855n^9 + 11385n^8 + 6030n^7 + 2922n^6 + 1278n^5 + 495n^4 + 165n^3 + 45n^2 + 9n + 1

观察出【n^13】的系数为【93600】,【n^14】的系数为【118800】,结果再次吻合!

至此基本理论研究算是阶段成完成,再来就是如何利用编程手段测试某种【牌型】是否【胡牌】(14张)或【听牌】(13张)。先休息一下,过几天有空再深入研究!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2026-5-13 07:28 , Processed in 0.027099 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表