我们的专栏作者小彭发布了德州扑克胜率计算的数学原理。
-------- 以下是小彭的胜率计算原理原文------
在德州扑克比赛的直播过程中,多亏了感应牌或者是牌桌摄像头,我们可以在屏幕上看到玩家的手牌;同时,转播方往往还会把玩家在当前情况下的胜率百分比直接显示在手牌旁。平时的游戏或者学习过程中,大家可能也多次会需要(摊牌)胜率的信息。
大家是否好奇过胜率的数学原理?这一切其实很简单。其计算方法主要有两个部分。
1.牌力分析(Hand-Evaluation)
首先我们需要一个牌力分析函数来帮助我们判断摊牌后的绝对牌力。
从大家最熟悉的德州扑克的牌力列表开始,从皇家同花顺,到高牌结束,相同牌力的5张牌的排列组合一共有7462种(并不重复计算相同牌力但不同花色的组合):
同花顺(包含皇家同花顺)
四条
葫芦
同花(除去同花顺)
顺子(除去同花顺)
三条
两对
一对
高牌
总数 10+156+156+1277+10+858+858+2860+1277 = 7462
需要再次注意的是,这里我们计算的是绝对牌力的总数,而不是排列组合的总数。
我们可以用最简单的方法写出7462种所有不同情况下的组合,给每个情况按实际大小降序赋值,用简单的字符串查找/正则表达式的方法做对比,将2张手牌和5张公共牌拼接之后,在7选5的情况下得出最强牌所代表的牌力值。
2. 所有情况的遍历
以单挑为例,在已知双方手牌的情况下,场上5张公共牌的可能性一共有(5,48)=1712304种,根据每种情况,我们分别用牌力分析函数计算两位玩家的绝对牌力,并记录胜负平。在遍历完所有情况之后,便可知道双方的精确胜率。