2009-12-21 33 views
2

“在hashlife中,该字段通常被视为一个理论上无限的网格,所讨论的模式集中在原点附近。使用四叉树来表示场。给定一个22k单元的正方形,一边2k,第k哈希表在未来将2k-1乘2k-1的方格存储在中心,2k-2代。例如,对于4x4方格,它存储2x2中心,第1代前向;而对于一个8x8的方块,它将存储4x4中心,向前2代。“在Golly中哈希生命如何继续下去?

因此,如果给定8x8的初始配置,我们会得到一个4x4的正方形1代前向中心w.r.t. 8x8正方形和2x2正方形2代正方形(1代正方形4x4正方形)以8x8正方形为中心。随着每一代新一代我们对网格的看法减少,反过来我们得到自动机的下一个状态。在最内层的2x2平方2k-2代前进之后,我们再往前走。

那么Golly的hashlife如何永远持续下去呢?其对该领域的看法似乎也从未减少。它似乎显示了2k-2代后整个自动机的状态。更重要的是,随着时间的推移,随着时间的推移,这种算法的观点似乎会增加。网格视图缩小以显示扩展的自动机?

+1

这是正式的Languagues和自动机理论? – 2009-12-21 19:00:40

+0

自助项目,以协助学习f#。 – Naximus 2009-12-21 19:05:33

+0

嘿,如果你想出了不错的F#生活实现,我想看看他们:) – Mau 2010-07-13 14:09:48

回答

6

有一个good article on Dr. Dobb's详细介绍了HashLife的工作原理。基本的答案是,您不仅仅在现有节点上运行算法,还会使用新的移位节点来获取下一代。

+0

这是一个很酷的文章。我将不得不在假期尝试实施。 – gradbot 2009-12-22 02:03:55

+0

我可以得到下一代(使用移位节点并按照你说的合并它们),但不是永远。正如每个新一代通过视野降低一样。所以一旦我回到基本情况 - 4x4我不能再走了。 因此,如果给定一个方形的K×K平方,程序将输出作为中心的2k-1×2k-1平方,未来2k-2代。 但是如果我想要更多的世代呢?不知何故,哈利生活中的hashlife实现似乎永远持续下去? – Naximus 2009-12-22 06:53:23

1

集中正方形只是预先计算的东西。该算法确实始终保持整个宇宙,并更新它的所有部分,而不仅仅是中心。

5

要清楚(因为你的^符号失踪),你都在问:

鉴于侧2 ^(2K)电池,2^k的方形,在的第k个水平 树,哈希表存储未来中心2 ^(k-2)代的2 ^(k-1)-by-2 ^(k-1)平方的单元。 [...]

所以赋予了8x8的初始配置[...]随着每一代新 我们电网的看法降低,在转,我们得到了 自动机的下一个状态。在得到最内层的2^k-2代前进之后,我们不得不进一步发展。

那么Golly的hashlife如何永远持续下去呢?其对 领域的看法似乎从未减少。

代替使用8×8模式开始的,而是想象你开始与恰好包含在它里面的8×8模式的更大模式。例如,您可以从16x16图案开始,该图案的中心为8x8图案,边缘周围为4行空白单元格。通过将空白的4x4节点与8x8开始模式的4x4子节点进行组装,这种模式很容易构建。

给定这样的16x16模式,HashLife算法可以给你一个8x8的答案,在未来4代。

你想要更多吗?好吧,从32x32模式开始,这个模式主要包含空白区域,中间是8x8模式。有了这个,你可以得到一个16x16的答案,在未来8代。

如果您的图案包含移动的物体,移动的物体移动速度足够快,以至于经过8代之后才会出现在16x16区域之外,该怎么办?简单 - 从64x64开始模式开始,但不是试图运行它整整16代,只是运行它8代。

一般而言,所有的情况下任意大的,可能扩大图案,随时间任意长的时间,可以根据需要通过围绕添加尽可能多的空白空间处理(事实上在天哪处理)模式之外。