关于麻将的算法问题

2014-08-14 21:23:30 +08:00
 SakuraSa
1.麻将基本
(1. 麻将是一种将手中的牌(14张)通过交换变成特定形式从而获胜的游戏
(2. 当手牌变成 (AA)*2 + (AAA | ABC)*4 的形式时获胜。其中AA表示一对相同的牌,AAA表示3张相同的牌,ABC表示3张牌面数字相邻的不同的牌。
(3. 当最少只要交换1次就可以获胜时,叫做“听牌”
(4. 当最少只要交换n次就可以“听牌”时,叫做“n向听”

2.问题
通过牌面,计算出当前牌是“x向听”(可记“听牌”为“0项听”;获胜为“-1项听”

3.当前思路
http://stackoverflow.com/questions/4239028/how-do-i-calculate-the-shanten-number-in-mahjong
基本是按照上面搜索到的方法来做的

4.需求
希望能在1s内完成1k个手牌的项听数计算,当前我的python实现的算法需要1min才能完成1k次计算。

5.碎碎念,可以略过……
我是一名日麻爱好者,可惜实力实在是没法看,以至于在小伙伴里抬不起头……
于是,就想着通过分析牌谱,找出自己的缺点,找出高手们的技术特点,来改进自己。
其中,这个向听数计算,就是分析每一步是不是最优的必要算法(评价函数)。
可惜,想了很久也没有实现快捷的算法。
现在我手里已经收集了大约1w个牌谱(通过自己的网站,从大家那里收集)。
如果以现在的算法速度,全分析完成大约要几个月……
所以现在只能玩一盘,就用电脑跑10min左右的分析……
想想,自己花在这上面(包括做网站)都快追上打麻将的时间了,可惜麻将水平毫无长进……
真不知道自己是怎么想的。
10055 次点击
所在节点    问与答
28 条回复
Cassandra
2014-08-14 21:25:27 +08:00
玩个麻将这么累,你没救了
lrz0lrz
2014-08-14 21:30:04 +08:00
@Cassandra 这才是认真的玩麻将嘛。
Cassandra
2014-08-14 21:33:00 +08:00
@lrz0lrz 一个游戏这么认真,累不累得慌
GtDzx
2014-08-14 21:35:16 +08:00
提供一个思路:
1) 既然你不考虑什么"十三不靠"等诡异胡法,不同的"花色"(条、万、饼)需要的张数是可以分开计算的
2) 对于每一个"花色",总共有不超过5^9(大约2×10^6)种组合(每个数字可能有0-4张牌),你完全可以预先计算出来每种组合需要的张数,存在内存里
3) 最后拿到一副牌,分离"花色",对每个花色查表得到需要的张数,然后求和
4) 可能需要最"风牌"特殊处理一下,不过这个计算量不大
Automan
2014-08-14 21:35:30 +08:00
@Cassandra 享受的是解决问题的过程。
13k
2014-08-14 21:37:24 +08:00
就要支持这样认真的。
Cassandra
2014-08-14 21:39:44 +08:00
@Automan 享受的是玩耍的过程
SakuraSa
2014-08-14 21:46:15 +08:00
@GtDzx
1)实际上“十三不靠”、“国士无双”之类的特殊牌型,通过相应的算法是可以以非常低的运算量判断的。比较困难的还是一般型的4~7向听
2)似乎是个不错的办法~今晚我就去试试
3)现在我的算法,实际上是搜索出所有牌面可能解释成 AAA, ABC, AA, AB, AC, A 的形式,然后再通过事先计算好的表格得出向听数。中间用了少许剪枝,但似乎没有明显效果。
aheadlead
2014-08-14 21:46:38 +08:00
LZ是原村和流的

天才麻将少女里面那么多诡异的打法...LZ你造吗
SakuraSa
2014-08-14 21:50:06 +08:00
@Cassandra
一开始我只是想提高水平啦,后来发现花了很多精力以后,就越来越不想收手了……
Ansen
2014-08-14 22:08:06 +08:00
七对?
SakuraSa
2014-08-14 22:12:34 +08:00
@aheadlead
数据流大概还能学一学,开挂流完全没法学嘛 ฅ۶ó ﹏ò
Cassandra
2014-08-14 23:08:00 +08:00
@SakuraSa 简直没救
aheadlead
2014-08-14 23:16:08 +08:00
@SakuraSa
赤宝牌5饼岭上开花,以清一色+对对和+三暗刻+三杠子+赤宝牌1张+岭上开花的13番累计役满
@saki
Daniel65536
2014-08-15 01:06:05 +08:00
@SakuraSa @aheadlead

青天井規則:字一色・三暗刻・四槓子・役牌4・嶺上開花・寶牌72
得點:90,865,195,024,359,483,499,283,685,761,351,700(約為9 × 10^34)點;
合計140符105飜。
@小泉純一郎 《渣和无用改革》 第七回 天地創世(Beginning of the Cosmos)

/* 论渣和是如何吊(kai)着(gua)打(cao)天麻的,PS,小泉的手牌是利用手指摩擦牌面而制造出的白板18张*/
aheadlead
2014-08-15 01:34:54 +08:00
@Daniel65536
saki打出那手牌的时候还只是县内选拔呢...
msg7086
2014-08-15 02:32:16 +08:00
这种只靠运气的垃圾游戏…
aheadlead
2014-08-15 02:44:08 +08:00
@msg7086 你觉得你会不会被喷...
msg7086
2014-08-15 06:28:00 +08:00
@aheadlead 前天一波好调冲上二段了昨天一路吃翔快跌回初段了,这游戏能玩?

打啥来啥,起手一向听到死,立直被追立还能点一发,亲家大波立随便切了一张点了个一发七对,再加上牌姬满满的恶意,不是垃圾游戏是啥
msg7086
2014-08-15 06:33:14 +08:00
顺便to op:

只分析向听数意义不大,还要考虑进章面,场况,手牌的打点,等等。另外牌姬也是个很大的因素,没牌运,怎么打都是死,牌运好,起手一向,二巡立了一发自摸还能中里什么的…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/127929

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX