Gomoku Board代表

时间:2014-02-21 14:17:08

标签: data-structures data-representation gomoku

我正在开发Gomoku游戏,我需要一个有效的数据结构来存储电路板状态, 我已经考虑过将它存储在2D数组中,但我确信有一种更有效的方法。 感谢

1 个答案:

答案 0 :(得分:0)

就时间效率而言,由于我相信你将主要进行索引查找,因此数组几乎是最佳选择 - 它在恒定时间内支持此查找,具有低常数因子。

在空间效率方面:

每个方格可以为空,也可以由任何一个玩家填充。所以最多有3种可能性。为了获得最大的空间效率,我们可以将整个电路板存储在base-3表示中,但是,由于计算机以二进制方式工作,我们需要处理整个电路板以确定某个给定方块的值(因此简单的索引查找将会花时间与电路板的大小成正比 - 如果时间确实不是问题,你可以考虑这个)。相反,我建议每平方使用2位,这样我们就可以指出4种可能性之一(第4种未使用)。

许多语言都有某种bitset实现,允许你使用一个位数组,这对于上面的方法来说是完美的。

你也只想要一个bitset(不是2D),因为在使用2D结构时通常需要一些内存开销。从2D到1D的转换很简单 - 我们可以使用x*height + yy*width + x将2D索引转换为1D。

虽然我建议首先确定你需要进行这种优化 - 我相信Gomoku板通常都很小,所以即使是庞大的表示也能很好地工作(尽管有些AI技术可以制作很多版本的板,所以,如果你正在这样做,最小的代表性是有意义的。)