什么是最有效的算法主要取决于初始状态。
如果大多数单元格都死了,您可以通过跳过空白部分而不是逐个单元格计算内容来节省大量 CPU 时间。
我认为,当您的初始状态类似于“随机,但生命几率低于 5%”时,首先检查完全死空间是有意义的。
我只是将矩阵分成两半,然后首先检查较大的矩阵。
所以如果你有一个 10,000 * 10,000 的字段,你首先要累积 5,000 * 5,000 的左上四分之一的状态。
如果第一季度的状态总和为零,您现在可以完全忽略第一季度,然后检查右上方的 5,000 * 5,000 下一个生命周期。
如果它的状态总和 > 0,您现在将第二季度再次分成 4 部分 - 并对这些子空间中的每一个重复此检查。
您现在可以降低到 8*8 或 10*10 的子帧(不确定这里什么最有意义)。
每当你找到生命时,你就将这些子空间标记为“有生命”。
只有“有生命”的空间需要被划分成更小的子空间——可以跳过空的。
当您完成为所有可能的子空间分配“有生命”属性时,您最终会得到一个子空间列表,您现在只需将其扩展到每个方向 +1 - 使用空单元格 - 并执行常规(或修改)游戏生活规则给他们。
您可能认为将 10,000*10,000 空间划分为 8*8 的子空间是很多操作系统任务 - 但实际上,与对每个单元格加上它们的 8 个邻居加比较数字并在某处存储网络迭代的新状态......
但就像我上面说的,对于一个具有 30% 人口的随机初始化状态,这没有多大意义,因为不会有太多完全死掉的 8*8 子空间可以找到(不管死 256*256 子空间)
当然,完美优化的方式将持续但并非最不重要取决于您的语言。
-110