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左右的分析……
想想,自己花在这上面(包括做网站)都快追上打麻将的时间了,可惜麻将水平毫无长进……
真不知道自己是怎么想的。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/127929
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.