1

我想为德州扑克手牌创建一个查找表。现在,我使用素数来表示每张牌,并想弄清楚这些牌代表的总手牌是什么。这是因为卡片的顺序无关紧要,乘法将为我们提供一个唯一的数字。现在,我知道手牌评估器,但他们只评估手牌的强度,没有听牌,并没有根据我的需要将手牌分成许多类别。

以以下情况为例: 手牌:AdKd 翻牌:Kc5d3d

(d = 方块,c = 梅花,h = 红心,s = 黑桃)现在,这将从查找表返回一对和同花听牌。

现在这更棘手了: 手牌:AhAd 翻牌:5c5h3d

这将评估为过度配对。所以,基本上,我们不能将手牌和翻牌组合成一个数字,因为我们想确切地知道手牌与翻牌是如何相互作用的。

我已经创建了一种方法来确定是否存在同花或同花听牌以及是否存在顺子或顺子听牌。所以在那之后,花色不再重要,我们也不在乎非对子。基本上,给定两个代表手牌和翻牌的数字,我们得到一个手牌类别。对于最后一个示例,A 是质数 41,因此对于手牌我们得到 41*41=1681,对于公共牌,我们得到 7*7*3=147。好的,现在我们进入查找表并输入这个查找(147, 1681),它应该在恒定时间内返回 OVERPAIR(或我们设置的任何常量)。

如何首先实现查找表?和查找功能?(我已经计划为翻牌和手牌使用完美的散列算法,但我真的不知道如何将它们结合起来。)

4

1 回答 1

0

首先,对于编码手,我发现你的方法非常原始(不知道为什么你会使用 41 来表示 Ace,为什么不使用 37,以及你如何区分不同风格的 Ace)。我建议以下。

对于手,使用 1 到 52*51/2 之间的数字来表示每个组合。对于翻牌,使用 52*51*50/(2*3) 数字和 52*51*50*49/(2*3*4) 用于翻牌+转牌。

这些数字的每个组合将表示每个独特的情况。因此,为每个注释存储您想要的任何注释(顺子、顺子等)。

于 2013-12-27T07:11:45.327 回答