Oys*_*erD 35 language-agnostic algorithm performance conways-game-of-life
为了实验,我(很久以前)实施了康威的生命游戏(我知道这个相关的问题!).
我的实现通过保留2个布尔数组来表示"最后状态"和"正在更新状态"(每次迭代时交换2个数组).虽然速度相当快,但我常常想知道如何优化它.
例如,一个想法是在迭代N处预先计算可以在迭代(N + 1)处修改的区域(因此,如果一个单元不属于这样的区域,则甚至不会考虑在迭代(N + 1)).我知道这很模糊,我从来没有花时间详细介绍......
你对如何优化(速度)Game of Life迭代有任何想法(或经验!)吗?
180*_*ION 14
有一些超快速实现(从内存中)将8个或更多相邻方块的单元表示为位模式,并将其用作大量预先计算值的索引,以在单个机器指令中确定单元是活还是死.
点击这里:
http://dotat.at/prog/life/life.html
还有XLife:
http://linux.maruhn.com/sec/xlife.html
正如 Arbash 的 Black Book 中提到的,获得巨大加速的最简单直接的方法之一是保留更改列表。
不要每次都遍历整个单元格网格,而是保留您更改的所有单元格的副本。
这将缩小您在每次迭代中必须完成的工作。
不完全知道如何做到这一点,但我记得我的一些朋友必须用四叉树来表示这个游戏的网格才能完成作业。我猜这对于优化网格空间确实很有好处,因为您基本上只代表占用的单元格。但我不知道执行速度。
归档时间: |
|
查看次数: |
33197 次 |
最近记录: |