当前位置: 首页 > 软件库 > 程序开发 > 数学计算 >

texas_algorithm

德州扑克算法
授权协议 未知
开发语言 Java
所属分类 程序开发、 数学计算
软件类型 开源软件
地区 国产
投 递 者 史商震
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

德州扑克算法

用于德州扑克的算法,包括以下功能

  • 查表算法

  • 评估算法

使用

<dependency>
    <groupId>com.github.esrrhs</groupId>
    <artifactId>texas_algorithm</artifactId>
    <version>1.0.7</version>
</dependency>
// 获取2张手牌5张公牌的最大的5张牌
TexasAlgorithmUtil.getMax("黑2,黑3", "方2,方A,黑7,黑5,黑6");
// 获取7张牌的大小,用于比牌
int win = TexasAlgorithmUtil.getWinPosition("方4,方A,黑2,黑A,黑3,黑5,黑6");
// 获取2张手牌4张公牌的胜率,用于评估
float p = TexasAlgorithmUtil.getHandProbability("方3,方A", "黑2,黑4,黑5,黑K");

测试玩玩

  • 解压texas_algorithm.rar到当前文件夹

  • 运行TestUtil.Main

生成表玩玩

  • 解压texas_algorithm.rar到当前文件夹

  • 运行TexasAlgorithmUtil.Main,需要添加vm参数-Xmx8000m

查表算法

查表算法,给定任意7张牌(5张和6张也支持),查表给出5张最大牌的牌面以及大小、胜率、类型。查表方法很简单,下面讲一下生成表的算法。

算法实现

穷举C(52, 7)的组合

52张牌里面选7张,一共有1亿多种组合,对7张牌进行编码变成long类型,得到一个1亿长度的数组。

  • 给定6张和5张,也是同理生成

多线程快速排序

对这1亿长度的数组进行从小到大排序,排序依据就是7选5后的大小。使用多线程快速排序,在8核的机器上,排完大概需要10小时。

  • 如果把最终的查表算法替换原始的比牌算法,速度可以缩短到2小时。

结果输出

数组已经排好序,现在按照顺序输出到一个文件,内容有key、大小顺序、max牌的值、max牌的类型、可阅读的牌面信息。最后文件大小差不多12G。

  • 注意到大小其实是阶梯状的,就是有很多牌是一样大,但是先后顺序不同,所以在输出的时候,要再做一下比牌处理。

结果去色

1亿条数据如果直接用,内存会爆,使用去色算法缩减规模。分为有花色和无花色两个文件,最后文件总大小18M。实际加载到内存占用几十M。

  • 对于同花的类型,比如同花、同花顺、皇家同花顺,7张牌的分布肯定是比如红红红红红梅黑,就是至少5张牌是同花色的,于是可以转变花色成为方方方方方黑黑,节省key值

  • 对于非同花的类型,花色毫无作用,那么只需要把花色全去掉,变成方方方方方方方即可

查询方法

给定7张牌,先去同花表里查,如果没有就去非同花表里查,两个都有就谁大选谁。

评估算法

评估算法,给定2张手牌,0-4张公牌,大致估算出这手牌在1v1情况下的胜率。

算法实现

胜率计算

注意到前面已经生成了7张牌的大小顺序了,那么现在给定N张牌(2<=N<=6),只需要去7张牌的集合里遍历,看包含这N张牌的7张牌的胜率,做一下平均值就是平均胜率。顺便还会生出最大胜率最小胜率。5个输出文件最终大小是2G。

结果去色

这个N张牌的胜率表同样存在重复的,采用类似的方法去掉花色,分为两张表,查询先查询原始表,没有再去查询去掉花色的表。通过这种方法,6个文件可以缩减到300M。实际加载到内存差不多200M。

公牌查询

把公牌代入上面计算的胜率表中,查询得到公牌的胜率情况,也就是说对方用这个公牌去组成7张牌的平均胜率记为P1,以及最大和最小胜率P1Max和P1Min。

手牌公牌查询

把我的手牌和公牌加起来,代入上面的胜率表中,查询得到一个平均胜率P2。注意这时候P2是不准确的,因为手牌被重复使用了。这里存在误差。

胜率预估

P1、P2都已经拿到,根据P1和P2的关系用P1Max和P1Min做下差值即可得出胜率。这里假定分布是均匀的所以也会有误差。

预估误差

如果采用最原始的方法穷举所有组合,即固定手牌和固定公牌,穷举剩下公牌和对方手牌,并计算胜率,目前2张手牌4张公牌需要20多天才能计算完,并且数据量已经超标。通过和实际胜率比较,误差大部分在0.1以内,比如实际胜率0.5,预估0.6。

  • 德州扑克算法 用于带鬼牌的德州扑克的算法,目前支持两张鬼,包括以下功能 查表算法(内存占用十几M) 评估算法(内存占用300M) 使用 com.github.esrrhs texas_algorithm 1.0.12 // 获取2张手牌5张公牌的最大的5张牌 TexasAlgorithmUtil.getMax("黑2,黑3", "方2,方A,黑7,黑5,鬼"); // 获取7张牌的大小,用于比牌

  •          Data Structures and Algorithm Analysis in C, SecondEdition 数据结构和算法分析C语言版(第二版) by Mark Allen Weiss 作者: Mark Allen Weiss   PREFACE 卷首语   CHAPTER1:  INTRODUCTION 第一章: 简介 CHAPTER2:  ALGORITHM ANA

  • Poj 3301:Texas Trip After a day trip with his friend Dick, Harry noticed a strange pattern of tiny holes in the door of his SUV. The local American Tire store sells fiberglass patching material only i

  • Texas Trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3269   Accepted: 966 Description After a day trip with his friend Dick, Harry noticed a strange pattern of tiny holes in the doo

  •  Author: 楚格 2018-11-28   20:21:18 IDE: Pycharm2018.03   Anaconda 3.5.1 Python 3.7    KeyWord :  Pandas Explain:   更新中 --------------------------------------------------------------------------- ------

  • 题目链接:http://poj.org/problem?id=3301 Texas Trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4935 Accepted: 1543 Description After a day trip with his friend Dick, Harry noticed a strange

  • Texas hold’em Poker Time limit 1000 ms Memory limit 262144K Recently, Yang was addicted to Texas hold’em Poker. So he found a lot of people to play with him. Due to the large number of people, Yang ha

  • POJ-3301 Texas Trip 题意: 求最大正方形覆盖 分析: 旋转所有的点, 统计最大和最小的x,y坐标。这是一个凹函数(好像是的吧), 然后三分旋转区间, 求解。 代码: #include <cmath> #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using names

  • 题目链接:https://nanti.jisuanke.com/t/41408 题目大意 输入各个玩家的姓名和手中持有的扑克牌,根据玩家的手中扑克牌的大小(规则如题)对玩家从大到小排序。如果有玩家的牌一样,这些玩家就按照姓名的字典序从小到大排序。最后输出排序后的玩家姓名。 题目分析 模拟题,基本上没有什么难点,只是这道题模拟的规模相对比较大,如果不注意细节就会比较容易犯错。下面是题目中用到的思路:

  • osdLink_alg.c: /******************************************************************************* * * * Copyright (c) 2009 T

  • Texas Trip http://poj.org/problem?id=3301 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4709   Accepted: 1473 Description After a day trip with his friend Dick, Harry noticed a strange

  • 原题链接 其实按着他的规则慢慢写就行了,也没有什么坑点,,但是话是这么说,比赛的时候人的情绪会很紧张,这样的话就很容易出错,,很可能会写错一两个小地方,但是代码又比较长,还不好调。。所以写这种题还是很考验代码功底的,,慢慢练吧。 8说了直接上代码。补题也是wa了好几发才过,吐血 #include<iostream> #include<cstring> #include<cstdio> #inclu

  • 这个三分法对我来说是个比较陌生的东西,就在这里总结一下 二分法适用于单调函数,但是对于单峰函数的解决,就只能用 三分法求解极值了。 对于三分法的话,给一个大神博客的链接: http://chenjianneng3.blog.163.com/blog/static/128345126201033101044920/ 好了,转到正题,这道题的题意是:求出能覆盖一些点的正方形的面积的最小值 题意非常简单

  • 这就是一道纯粹的巨模拟题 非常暴力的进行枚举,剩下的两张牌有 45∗44÷2=990 45 ∗ 44 ÷ 2 = 990 种可能性 从七张里面选五张有 C57=1176 C 7 5 = 1176 种可能性,这两个相乘肯定是不会炸的 然后就巨模拟就好了 注意一点,在比顺子的时候,A2345是最小的,如果用比较rank最高的牌的方式比较,记得把A放到最后面 #include <cstdio> #inc

  • Texas Trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5487   Accepted: 1702 Description After a day trip with his friend Dick, Harry noticed a strange pattern of tiny holes in the do

  • POJ 3301 Texas Trip (三分) ACM 题目地址:  POJ 3301 Texas Trip 题意:  给定二维平面的n个点,要求一个面积最小的正方形,使其能覆盖全部的点。 分析:  去求凸包你就输了...  我们能够让正方形不要动。全部点进行旋转变换。这样结果是不会变形的。   变形即: x1=x*cos(a)-y*sin(a); y1=x*sin(a)+y*cos(a)  本

  • 原出处:http://blog.csdn.net/qq_37816449/article/details/75142734 After a day trip with his friend Dick, Harry noticed a strange pattern of tiny holes in the door of his SUV. The local American Tire store

 相关资料
  • 本文向大家介绍js计算德州扑克牌面值的方法,包括了js计算德州扑克牌面值的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js计算德州扑克牌面值的方法。分享给大家供大家参考。具体如下: 1. 代码如下: 2. 运行效果如下图所示: 希望本文所述对大家的javascript程序设计有所帮助。

  • 本文向大家介绍Java扑克牌速算24的方法,包括了Java扑克牌速算24的方法的使用技巧和注意事项,需要的朋友参考一下 已知一副扑克牌有54张,去除大王和小王,剩余52张。在其中随机抽取4张牌,利用加减乘除进行计算得到24. 从A到10,他们的值分别为1到10. 从J到K,他们对应的值是减去10以后的值。编写程序生成一副扑克牌,随机抽取4张,进行计算是否能得到24. 如果可以,列出可能的计算表达式

  • 本文向大家介绍java用扑克牌计算24点,包括了java用扑克牌计算24点的使用技巧和注意事项,需要的朋友参考一下 一副扑克牌的每张牌表示一个数(J、Q、K 分别表示 11、12、13,两个司令都表示 6)。任取4 张牌,即得到 4 个 1~13 的数,请添加运算符(规定为加+ 减- 乘* 除/ 四种)使之成为一个运算式。每个数只能参与一次运算,4 个数顺序可以任意组合,4 个运算符任意取 3 个

  • 一面是群面,我们组7个人 给20分钟,用一次性筷子,吸管,胶带,a4纸搭一个过山车轨道 面试官会根据各人表现提问,当时hr问了比较刁钻的就是,如果7进2,你觉得谁应该进入下一轮,如果7进1呢? 二面是单面,一面完半小时会给你打电话,下午二面 先自我介绍,主要问了简历上的内容,性格优势,你觉得自己为什么适合这个岗位之类的,我答的不好,也就没后续了,听说三面是当天晚上 记录一下自己的秋招历程,ti是当

  • 题目链接 NowCoder 题目描述 五张牌,其中大小鬼为癞子,牌面为 0。判断这五张牌是否能组成顺子。 解题思路 // java public boolean isContinuous(int[] nums) { if (nums.length < 5) return false; Arrays.sort(nums); // 统计癞子数量 i

  • 仿造扑克牌效果的滚动cover flow控件,借鉴了Columns Controller的一些思路。支持ios4.3以上,内有详细的注释和demo。缺点,有点占用手机资源,望大牛给点意见。 [Code4App.com]