【问题标题】:another Game of Life question (infinite grid)?另一个生命游戏问题(无限网格)?
【发布时间】:2010-12-01 17:30:17
【问题描述】:

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

我无法理解的一件事是编码人员如何实现无限网格?我们不能保留无限的任何东西,如果你跑得快,让几架滑翔机飞过边缘,等待几分钟并立即缩小,你会看到滑翔机仍在太空中逃跑,那么以上帝的名义如何以编程方式处理这个无穷大的概念呢?是否有一个有据可查的模式或什么?

非常感谢

【问题讨论】:

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


【解决方案1】:

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

由于存在局部性,您可以将字段划分为不同的部分,并独立模拟每个部分。如果你选择好你的位置,你会经常看到相同的模式。您可以模拟它们如何演变并将结果存储在查找表中,这样就不需要多次模拟相同模式的其他实例。将相邻的模式组合成更大的“元模式”可以让您预先计算它们,等等。

【讨论】:

    【解决方案2】:

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

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

    编辑:所以这不是我的想法。原来Wikipedia has an article 显示了一个经过深思熟虑的解决方案。那好吧! :) 享受吧。

    【讨论】:

    • 当我看到 Golly 正在运行(非常快)时,我观察到滑翔机从边缘滑出,如果我缩小并跟随它们进入太空,它们怎么知道在哪里进入网格?网格是坐标列表吗?还是根本存在?
    • 我不知道 Golly 是如何做到的——只是建议一种方法。如果您想查看,可以使用 Golly 源代码。
    • 我刚刚看到上面 Joren 的回复并阅读了维基百科链接。我现在有点明白了,但男孩它很棘手。非常感谢你们俩的回复。 (作为一名程序员,我现在觉得自己的不足达到了一个全新的水平!:))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    相关资源
    最近更新 更多