Data structures Gomoku董事会代表

Data structures Gomoku董事会代表,data-structures,data-representation,gomoku,Data Structures,Data Representation,Gomoku,我正在开发一款Gomoku游戏,我需要一个高效的数据结构来存储棋盘状态, 我曾考虑过将其存储在2D数组中,但我确信有一种更有效的方法。 就时间效率而言,非常感谢,因为我相信您将主要进行索引查找,所以数组将是最好的选择-它支持在固定时间内进行查找,且固定因子较低 在空间效率方面: 每个方块可以是空的,也可以由任一玩家填充。因此,最多有3种可能性。为了获得最大的空间效率,我们可以将整个板存储在BASE-3表示中,但是,由于计算机以二进制方式工作,所以我们需要处理整个板以确定某个给定的方块的值(因此,

我正在开发一款Gomoku游戏,我需要一个高效的数据结构来存储棋盘状态, 我曾考虑过将其存储在2D数组中,但我确信有一种更有效的方法。
就时间效率而言,非常感谢,因为我相信您将主要进行索引查找,所以数组将是最好的选择-它支持在固定时间内进行查找,且固定因子较低

在空间效率方面:

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

许多语言都有某种类型的位集实现,允许您使用位数组,这非常适合上述情况

您还可能只需要一个位集(而不是2D),因为处理2D结构通常会有一点内存开销。从2D到1D的转换很简单-我们可以使用
x*height+y
y*width+x
将2D索引转换为1D


尽管我建议首先确保您需要执行此优化,但我相信Gomoku板通常很小,因此即使是一个庞大的表示也能很好地工作(尽管一些AI技术可以制作很多板的副本,因此,如果您这样做,最小的表示也会有意义).

为什么您认为有更高效的数据结构?您需要支持哪些在二维阵列中效率低下的操作?我对Gomoku不是很熟悉,但似乎主要是做索引查找,对于索引查找,选择的数据结构是数组。我希望在内存效率方面做得更好