另一个生命游戏问题(无限网格)?

时间:2009-09-26 23:23:13

标签: algorithm data-structures sparse-matrix cellular-automata conways-game-of-life

我一直在玩Conway的生活游戏,最近发现了一些非常快速的实现,例如Hashlife和Golly。 (在这里下载Golly - http://golly.sourceforge.net/

我无法理解的一件事是编码器如何实现无限网格?我们无法保持无限的任何东西,如果你跑得很好并且让几个滑翔机从边缘飞过,等待几分钟然后向外缩放,你会看到滑翔机仍在那里空间逃跑,所以在神的名字中如何以编程方式处理这个无限的概念?是否存在记录良好的模式或什么?

非常感谢

2 个答案:

答案 0 :(得分:8)

在这种情况下,可以用某种类型的稀疏矩阵表示生命节点。例如,如果我们存储(LivingNode, Coordinate)对的列表而不是Nodes的数组,其中每个都是活的或死的,我们只是更改Coordinates而不是增加数组的大小。因此,所需的空间与LivingNodes的数量成正比。

此解决方案不适用于生命节点数量不断增加的状态,但它对滑翔机非常有效。

编辑:所以这不是我的头脑。结果显示Wikipedia has an article显示了一个更深思熟虑的解决方案。那好吧! :)享受。

答案 1 :(得分:6)

Wikipedia explains it。 基本的想法是,康威的生命游戏展示了地方性,因为与模式大小相比,信息以较慢的速度传播,并且填充细胞的最大密度约为任何区域中1/2的细胞。 (由于过度拥挤,更多会杀死细胞。)

由于存在局部性,您可以在不同的部分中分隔字段并独立模拟每个部分。如果你选择好你的地方,你会经常看到相同的模式。您可以模拟这些进展并将结果存储在查找表中,以便不需要多次模拟同一模式的其他实例。将相邻模式组合成更大的“元模式”允许您预先计算这些模式,等等。