java - 当程序知道所有牌时,如何计算扑克牌的百分比?

标签 java algorithm

我希望计算您在我的 java 程序中观看扑克时在电视上看到的百分比。这个问题和许多其他问题之间的区别(如果不清楚的话)是程序确实知道所有玩家的手牌,因此可以确定准确的百分比。有很多网站,比如这个:https://www.pokerlistings.com/online-poker-odds-calculator 您可以在其中输入玩家卡,它会给您百分比。我想知道是否有任何现成的算法或任何我可以在我的程序中使用的 java API。我知道我的问题可能有点不切实际。那么如果没有算法或API,也许有人知道它是如何计算的,以便我可以尝试构建自己的算法?

如果仍然存在困惑: 如果有 3 名玩家,他们的牌是

玩家1:作为kh

玩家 2:2d 3c

玩家3:AH AD

我想知道每位玩家在翻牌前、转牌前和河牌前获胜的百分比 提前致谢。

最佳答案

这些数字比您想象的要小得多,因此暴力破解是很有可能的。诀窍是尽可能忽略卡片出现的顺序。例如,如果您考虑翻前概率,您只关心河牌圈的整个牌面,而不关心具体的翻牌圈、转牌圈和河牌圈。

给定 3 手牌(6 张牌),牌堆中还剩下 46 张牌。这意味着河边有 choice(46, 5) = 1,370,754 个不同的牌面。枚举所有牌面,并计算每手牌在河牌圈获胜的次数。 (或者更准确地说,计算每手牌的赢率,因为有时 2 或 3 手牌会在河牌圈平局)。这给你翻牌前的概率,这是计算成本最高的事情。

考虑到翻牌,到最后只有 choice(43, 2) = 903 种可能的牌,因此翻牌概率(你称之为转牌前),枚举所有的出局并计算平均胜率是非常便宜的对于三只手。

考虑到翻牌圈和转牌圈,只有 42 张可能的河牌。因此,在转牌圈(河牌前),计算手牌权益甚至更便宜。

理想情况下,您需要一个快速的评估器,但如果您不想自己编写,那么应该很容易在网上找到它。

关于java - 当程序知道所有牌时,如何计算扑克牌的百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60254601/

相关文章:

java - 在 Android 中长按单个项目时,如何更改所有 RecyclerView 项目的可见性?

java - 数字子串的总和

java - 如何提高Java中搜索特定Google Drive文件的效率?

java - 如果我的 Servlet 实例变量是 StringBuffer 类型,它是线程安全的吗?

java - 开始接收短信 Activity

java - 将 "<"和 ">"写入 xml 文件而不是 java 中的 < 和 >

iphone - 声音频率检测

java - 如何不将重复项添加到数组列表中

c++ - CUDA:减少算法

algorithm - 算法书中编程语言的选择?