ITPUB论坛-中国最专业的IT技术社区

 找回密码
 注册
查看: 6152|回复: 21

[SQL] 论炸金花的概率

[复制链接]
认证徽章
论坛徽章:
25
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44紫蛋头
日期:2011-09-03 20:30:47ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
发表于 2017-1-7 15:40 | 显示全部楼层 |阅读模式
本帖最后由 qingyun 于 2017-1-8 13:57 编辑

前几周回趟老家,和老同学小聚,以前每次聚会都是掼蛋,不过几年不碰,规则也忘记的差不多了;这次回去,入乡随俗,每次下注都要考虑一下概率问题,但是也不大好马上打开电脑去根据刚学会的游戏规则去大致计算一下概率;所以对概率脑子里没有概念,最终在这种茫然的纠结中输的很惨。不过也无所谓,好歹也算学会了一个赌博技能;

简述一下规则,也许不完全正确:
1.N人参加的话,每人发3张牌(总共一副牌,没有大王);
2. 如果不看自己牌,就轮流各自上一个筹码;
3.如果谁忍不住想看看自己的牌,也可以,看过之后,有两个选择:
3.1.如果觉得自己牌不错,肯定会赢,就每次上两个筹码;
3.2.如果觉得牌不行,就放弃,退出本轮游戏,已经投入筹码就覆水东流,但好歹也算及时止损;
4. 最终随着某些人的中途退局,剩下的基本都是那些看过自己牌的对自己有信心的那几个人;
这时候,某个人对自己信心不够的时候,可以花4个筹码去看某个人的牌;
坚持到最后的牌大者也赢家,通吃牌面上所有筹码;

牌的大小如何判断,是这样的规则:
1. 最大组别:三张一样的牌,其中最大三个A,最小三个2;
2. 第2组别:顺子+同花,其中最大QKA最大,最小A23;
3.第3组别:非顺子+同花。 其中最大AKJ, 最小124,如果牌点一样,花色不同,可能是红桃黑桃方块梅花的顺序;
4 第4组别: 顺子+非同花,其中最大QKA,最小A23;
5.第5组别: 有对子的;中最大AAK, 最小223;
6.第6组别: 排除上面5种剩下的,直接比较大小, 其中最大AKJ, 最小A24;

这个划分,想起了元朝时候的人的级别划分:
第1级:蒙古王公贵族;
第2级:蒙古平民;
第3级:少数民族,色目人,波斯人之类的;
第4级:北方汉人;
第5级 南方汉人;

这个比喻不太好,就当加强记忆;



下面就开始计算各种情况的概论:
先算总体样本,总共13*4=52张牌,任取3张,就是 C(52,3) =(52*51*50)/(3*2)=22100 (种);
然后分配计算6类的组合:


下面计算各种组合:
1. 点数相同:一共13种字符:AAA,QQQ...111;每个组合4张牌选3张
也就是: 13*C(4,3)=13*4=52(种);;
2.顺子+同花: 顺子组合:是A23,234...QKA, 一共12种;每种顺在4中同色;
也就是:12*4=48(种);;
这样来说, 顺子+同花 的概率 要 略小于 3个相同的牌;
所以规则可能记反了;

3..非顺子+同花:所有的同花-其中的顺子:
4* C(13,3)=4*(13*12*11)/(3*2)-48=1144-48=1096(种)

4. 顺子+非同花: 顺子12种,每种颜色不同组合为(任意颜色组合-颜色一样):4*4*4-4=60种;
所以一共是 12*60=720种;

5.有对子的: 先不考虑颜色,3张牌,两张相同,另一张不同;
两张相同的可能性是13,另一张可能性是12;
实际上就是P(13,2)=13*12=156

再考虑颜色,这里稍微有点麻烦,相同的两种牌必须是不同颜色;
比如我们就考虑112,那么11的颜色可能性是 C(4,2),2的可能性是4;
也就是颜色的可能性是 C(4,2)*4=4*3/2*4=24;
所以总共是 156*24 =3744(种)


6 .剩下的: 22100 -(52+48+1096+720+3744)= 16440(种)



把这六组做一个100%比地位分布;

1.三张一样(52): 0 ~0.24

2. 顺子+同花(48): 0.25~0.45

3. 非顺子+同花(1096): 0.46~5.41

4. 顺子+非同花(720): 5.42~8.67

5. 对子(3744) 8.68~25.61

6. 普通牌 (16440) 25.62~100


感觉游戏规则不太合理,应该越少的情况,级别越高;

所以游戏规则最好修改成2,1,4,3,5,6 ; 顺子比同花出现的概率更低,所以顺子优先级应该高于同花才合理;




赌博的时候,可以把这个图放到到手机上,看了牌后,基本就能估算牌的地位了;

基本上有同花,就秒杀其他95%的可能性;有顺子就秒杀其他90%的可能行; 既是顺子又是同花,基本秒杀99%的其他可能性,算是高富帅站在人生巅峰了;


当然要看参与人数,人越多,赢得概率越小;


比如你手上的牌是 非同花的顺子,那么你的排行是 5.42%~8.67%; 也就是估算能秒杀92%其他情况,

如果参与的是6个人,那么其他5个人的牌,大小都要排行在92%以下你才能赢;

这样你赢得概率是 0.92的5次方,也就是66%左右,当然这种情况也可以一搏了!

所以在人数多的时候,要注意止损;因为人数多,一旦赢一把大的,可能把之前几十把小输的都扳回来;逆袭的畅快可能也是这种游戏的魅力之一吧;



当然以上的概率计算并没有做深入思考和验证;可能有些错误;


而且,如果提供一个特定的组合,它的精确排名是多少呢?

老朽自身的那点三脚猫的概率论知识已经不够了;

用一种最傻瓜的方法,穷举(对于杂色,牌一样的比较有点不太对,还有A的大小处理有点小麻烦);


with a as
(select level  as pai from dual connect by level <= 13), --13张扑克牌
b as
(select level as color from dual connect by level <= 4) --4种花色         
SELECT ROW_NUMBER() OVER(ORDER BY LVL,CASE
         WHEN LVL = 'LEVEL_1' THEN
          CASE
            WHEN PAI_1 = 1 THEN
             14
            ELSE
             PAI_1
          END --3张一样 (把 A当作14作为大小)
         WHEN LVL = 'LEVEL_2' THEN
          PAI_1 * 10 + COLOR_1 --顺子+同花
         WHEN LVL = 'LEVEL_3' THEN
          TO_NUMBER(REPLACE(ALL_pai,
                            '01',
                            '14')) --非顺子+同花(把 A当作14作为大小)
         WHEN LVL = 'LEVEL_4' THEN
          PAI_1 * 10 + COLOR_1 --顺子+非同花
         WHEN LVL = 'LEVEL_5' THEN
          CASE
            WHEN PAI_1 = PAI_2 THEN
             PAI_1 * 10 + PAI_3
            WHEN PAI_2 = PAI_3 THEN
             PAI_2 * 10 + PAI_1
          END --对子
         ELSE
          TO_NUMBER(REPLACE(ALL_pai,
                            '01',
                            '14'))
       END DESC ) AS RN,
       A.*
  FROM (
        
        SELECT
        
         CASE
            WHEN A1.PAI = A2.PAI AND A1.PAI = A3.PAI THEN
             'LEVEL_1' --3张一样
            WHEN ((A3.PAI = A2.PAI + 1 AND A2.PAI = A1.PAI + 1) or
                 (A2.PAI = 12 AND A3.PAI = 13 AND A1.PAI = 1)) AND
                 B1.COLOR = B2.COLOR AND B2.COLOR = B3.COLOR THEN
             'LEVEL_2' --顺子+同花
         
            WHEN NOT ((A3.PAI = A2.PAI + 1 AND A2.PAI = A1.PAI + 1) or
                  (A2.PAI = 12 AND A3.PAI = 13 AND A1.PAI = 1)) AND
                 B1.COLOR = B2.COLOR AND B2.COLOR = B3.COLOR THEN
             'LEVEL_3' --非顺子+同花
         
            WHEN ((A3.PAI = A2.PAI + 1 AND A2.PAI = A1.PAI + 1) or
                 (A2.PAI = 12 AND A3.PAI = 13 AND A1.PAI = 1)) AND
                 NOT (B1.COLOR = B2.COLOR AND B2.COLOR = B3.COLOR) THEN
             'LEVEL_4' --顺子+非同花
            WHEN A1.PAI = A2.PAI OR A2.PAI = A3.PAI THEN
             'LEVEL_5' --对子
         
            ELSE
             'LEVEL_6'
          END AS LVL,
         
          b1.color as COLOR_1,
          a1.pai   as PAI_1,
          b2.color as COLOR_2,
          a2.pai   as PAI_2,
          b3.color as COLOR_3,
          a3.pai   as PAI_3,lpad(a1.pai, 2, '0'  ) || lpad(a2.pai, 2, '0'  ) || lpad(a3.pai, 2, '0'  ) as ALL_pai
        
          from b B1, A A1, b B2, A A2, b B3, A A3
        
         WHERE B1.color || '.' || A1.PAI <> B2.color || '.' || A2.PAI
           AND B1.color || '.' || A1.PAI <> B3.color || '.' || A3.PAI
           AND B2.color || '.' || A2.PAI <> B3.color || '.' || A3.PAI
              
           AND A1.PAI * 10 + B1.COLOR <= A2.PAI * 10 + B2.COLOR
           AND A2.PAI * 10 + B2.COLOR <= A3.PAI * 10 + B3.COLOR) A







其实,就这么小儿科的概率了解,对于炸金花的技能,估计帮助不大;

但是可以弄出 很多场景,让计算机模拟计算;


比如: 3个人开战,每次第1轮开牌,发现牌的排名在70%就跟进;模拟随机让电脑花上一天,做上几百亿次; 或者每次第3轮开牌,排名75%以上跟进,否则放弃;然后看结论;


当然对方的处理也是随机的,所以这个模拟模型还不大好弄,不过那些真正的知识分子,应该能够想到好的运算模型,然后通过电脑验证,最终会得到相对胜算比较高的跟进策略;


未来智能机器人都有深度学习的功能,搞一个学习这个游戏,虽然有一定的随机性,但是估计应该做到10赌9赢没问题吧;








































论坛徽章:
1
秀才
日期:2016-11-25 16:52:36
发表于 2017-1-7 16:28 | 显示全部楼层
牛X!哈哈。  实战中察言观色也是很重要啊

使用道具 举报

回复
论坛徽章:
393
雪佛兰
日期:2013-12-04 20:30:02马上有钱
日期:2014-03-11 11:59:122014年世界杯参赛球队:喀麦隆
日期:2014-07-11 12:10:53马上有对象
日期:2014-04-09 16:19:542014年世界杯参赛球队: 洪都拉斯
日期:2014-06-25 08:25:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-01 15:27:22itpub13周年纪念徽章
日期:2014-10-09 12:04:18马上有钱
日期:2014-10-14 21:37:37马上有钱
日期:2015-01-22 00:39:13
发表于 2017-1-8 11:32 来自手机 | 显示全部楼层
厉害,想知道实战结果

使用道具 举报

回复
认证徽章
论坛徽章:
25
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44紫蛋头
日期:2011-09-03 20:30:47ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
发表于 2017-1-8 13:56 | 显示全部楼层
〇〇 发表于 2017-1-8 11:32
厉害,想知道实战结果

输的一塌糊涂

使用道具 举报

回复
论坛徽章:
6
秀才
日期:2017-02-22 15:18:00
发表于 2017-1-8 16:41 | 显示全部楼层

哈哈哈哈,
这个只是纯数学模型,而且算法有缺陷
你只算了一个人的排列组合,要几个玩家合并一起算的呀

使用道具 举报

回复
认证徽章
论坛徽章:
25
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44紫蛋头
日期:2011-09-03 20:30:47ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
发表于 2017-1-8 21:13 | 显示全部楼层
螳螂舞大刀 发表于 2017-1-8 16:41
哈哈哈哈,
这个只是纯数学模型,而且算法有缺陷
你只算了一个人的排列组合,要几个玩家合并一起算的呀

是的,我这个只是最浅显的部分;深入研究,超出能力范围了;

使用道具 举报

回复
论坛徽章:
78
生肖徽章2007版:牛
日期:2012-08-02 22:43:00紫蛋头
日期:2012-12-08 09:43:38鲜花蛋
日期:2012-11-17 12:02:07鲜花蛋
日期:2013-02-05 21:53:34复活蛋
日期:2012-11-17 12:02:07SQL极客
日期:2013-12-09 14:13:35SQL数据库编程大师
日期:2013-12-06 13:59:43SQL大赛参与纪念
日期:2013-12-06 14:10:50ITPUB季度 技术新星
日期:2012-11-27 10:16:10最佳人气徽章
日期:2013-03-19 17:24:25
发表于 2017-1-9 07:40 | 显示全部楼层
一看就是韭菜

使用道具 举报

回复
认证徽章
论坛徽章:
15
ERP板块每日发贴之星
日期:2007-08-24 01:03:56狮子座
日期:2015-09-10 09:07:23处女座
日期:2015-09-11 10:28:03ITPUB14周年纪念章
日期:2015-10-26 17:23:44喜羊羊
日期:2015-06-24 14:33:00慢羊羊
日期:2015-06-15 14:22:442015年新春福章
日期:2015-03-12 17:22:46优秀写手
日期:2014-11-20 06:00:13茶鸡蛋
日期:2013-06-29 22:37:49蛋疼蛋
日期:2013-04-27 10:34:16
发表于 2017-1-9 09:26 | 显示全部楼层
实战中,查颜观色只能对一般人,常赌的看不出来~

使用道具 举报

回复
认证徽章
论坛徽章:
166
SQL数据库编程大师
日期:2016-01-13 10:30:43SQL极客
日期:2013-12-09 14:13:35SQL大赛参与纪念
日期:2013-12-06 14:03:45最佳人气徽章
日期:2015-03-19 09:44:03现任管理团队成员
日期:2015-08-26 02:10:00秀才
日期:2015-07-28 09:12:12举人
日期:2015-07-13 15:30:15进士
日期:2015-07-28 09:12:58探花
日期:2015-07-28 09:12:58榜眼
日期:2015-08-18 09:48:03
发表于 2017-1-9 15:59 | 显示全部楼层
估计是安徽老乡,不然不会掼蛋。另外,你没玩德州扑克,否则情况更糟糕,你算的更多。

使用道具 举报

回复
论坛徽章:
454
秀才
日期:2015-08-18 09:49:27秀才
日期:2015-09-09 10:33:01秀才
日期:2015-09-09 10:33:01状元
日期:2015-09-09 10:34:21榜眼
日期:2015-09-09 10:34:21秀才
日期:2015-09-09 10:33:01秀才
日期:2015-09-09 10:33:01秀才
日期:2015-09-09 10:33:01秀才
日期:2015-09-09 10:33:01秀才
日期:2015-09-09 10:33:01
发表于 2017-1-9 22:51 | 显示全部楼层
楼主写个Beta Go, 让你的老同学输个精光。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表