【发布时间】:2014-03-18 10:53:24
【问题描述】:
参考原问题:Optimizing hand-evaluation algorithm for Poker-Monte-Carlo-Simulation
我有一个包含 5 到 7 张卡片的列表,并希望将它们的值存储在一个哈希表中,该哈希表应该是一个 32 位整数数组,并由哈希函数值作为索引直接访问。 关于 52 张牌中的大量可能组合,我不想浪费太多内存。
数字:
- 7张牌组合:133784560
- 6卡组合:20358520
- 5张牌组合:2598960
- 总计:156.742.040 种可能的组合
存储 1.57 亿个 32 位整数值大约需要 580MB。所以我想通过在数组中为不需要的值保留内存来避免增加这个数字。
所以问题是:哈希函数会是什么样子,它将每个可能的、非重复的卡片组合映射到 0 到 156.742.040 之间的连续值,或者至少接近它?
【问题讨论】:
-
呃,也许是一张代表卡片的位图?
-
每张牌都有一个代表它的 ID:方块中的两个 = 0,梅花中的王牌 = 51。现在我想为 5 到 7 的所有非重复可能组合设置一个唯一值将其映射到数组的卡片。
-
嗯:两个方块 =
1<<0和梅花 A 是1<<51并将它们相加。瞧:一个位掩码。 (如果少于 52 张卡,您可能会发明更紧凑的代码) -
计算机国际象棋已经存在了五十多年。重新发明轮子很难不。
-
嗯,连续的订单让这成为一个问题。 hash function 不授予连续订单。您想要的正确数学术语是map function。我对你想要什么有一个想法,让我看看我今天或明天能不能找到一些时间来充实它。
标签: hash-function