我的问题更多的是逻辑而不是编码本身:我正在构建一个python脚本来模拟扑克手并从中获取统计数据。我的代码非常适合分配和比较指针,我的脚本唯一的瓶颈就是为每个玩家获得最佳的卡片组合:模拟是为了奥马哈 - 每个玩家获得4张牌,棋盘有5张牌。每位玩家必须使用5张牌的最佳组合(2张来自玩家手牌,3张来自棋盘牌)。
问题是:到目前为止,我能想到的唯一方法是比较一名球员可以拥有的每一手牌,然后与其他球员进行比较。
例如,玩家A有牌A1A2A3A4,牌子是B1B2B3B4B5:
首先,我将比较所有可能的牌手A:[A1A2B1B2B3,A1A2B1B2B4,A1A2B1B2B5,...,A3A4B3B4B5]并得到他最好的牌(每个牌手的60个组合)。
为所有玩家执行此操作,然后检查谁拥有获胜者。
我的问题是:你认为有一种方法可以让每个球员的最佳牌不必检查所有60种组合吗?
我花了16个小时来完成~65亿次迭代(约250万手×60个板组合×每手40次迭代)。
您是否也可以权衡效率?我不知道我是否正在尝试在这里无法完成的事情= P.
编辑 - 已解决
伙计们,感谢您的投入。最后我通过使用位操作解决了它:
取决于您的评估功能如何工作。如果你只有一个带有5张牌的黑匣子并进行评估,那么除了全部60张5张牌之外,你所能做的并不多。但如果它可以分解成碎片,那么可能会绕过它们中的一些。
例如,我在onejoker中的代码是通过有向无环图的5步走,所以我为7张卡制作了一个特殊情况函数,跳过重复一些以相同卡片开头的组合的步骤。它最终还是会评估所有21种(7种选择5种)组合,但步数不到5 * 21。你可以为奥马哈手做类似的事。
我不会分成5个硬手:
如果你真的想看到每个球员最好的5张牌: