散列是一种比较两个32x64二维数组的好方法吗?

时间:2011-12-09 14:54:34

标签: hash conways-game-of-life

我正在尝试在嵌入式设备上实现Conway的生命游戏。我只有1kb的RAM可供使用,总共有2048个单元,等于512字节。我将一次计算下一代8x8单元,这样我就不必在任何一个点上将两代存储在RAM中。

然而,我还想做的是检测GoL何时陷入循环/静态状态。当我在PC上创建一个模型时,我只是存储了最后一个hundreth和千代,并将当前一代与它进行了比较。我不能用1kb的RAM做到这一点,我想做的只是计算最后x代的散列并将其散列与当前代的散列进行比较。

有一些非常轻的XTEA或SHA1实现,但我不确定散列是否真的适合这个目的,因为我需要确定两代中的每个单独的单元是否相等。你会推荐什么?

谢谢,

编辑:只是想想,我实际上可以计算匹配的数量,如果它达到一定的阈值,那么假设它处于一个循环中,对于每千代左右重复出现的模式来说效果不会很好。

3 个答案:

答案 0 :(得分:1)

我认为这是一个很好的选择。哈希冲突的概率很低,因此它可以作为你的应用程序接受,它不是核反应堆。

答案 1 :(得分:0)

当事情相等时,散列是很好的。如果哈希值相等,那么你仍需要(应该)进行个别比较。

答案 2 :(得分:0)

我决定只获得一个具有更多RAM的设备,但我观察到的一件事是,如果有一个模式,那么相同的模式将每x代匹配,而如果它只是一个随机的哈希冲突,那么它不会。所以,如果我们有以下几代:

123*
231
312
123*
231
312
123*

123每三代匹配一次。哈希冲突不会发生这种情况。

其他答案是正确且有价值的,但这是唯一能够解决问题的方法。我不确定在回答你自己的问题时礼仪是什么,所以如果我不应该将其标记为答案,那么请不要投票,只是给我留言,我会重新分配正确答案。

谢谢,