确定对象邻居的算法

时间:2009-02-05 05:11:32

标签: algorithm

我依稀记得阅读有关在屏幕上绘制对象的编程练习。如果一个对象少于2个邻居,它就会死掉,因为它很孤独,如果它有3个以上就死了,因为它很拥挤。如果邻居的数量是2或3,那么它将产生儿童。一般的想法是看看有多少代可以持续。

无论如何,有没有人记得这个练习的名称以及算法的名称呢?

5 个答案:

答案 0 :(得分:4)

听起来像Conway's Game of Life,对于算法等,如果您只是搜索名称,那里有很多来源。

答案 1 :(得分:2)

这是生命的游戏。我不相信这个算法有一个特定的名称(除非它是生命的算法,听起来像你从那些深夜的简单商业广告中购买的东西)。

答案 2 :(得分:2)

更一般地,这些被称为细胞自动机。有各种有趣的元胞自动机,包括可以产生旋转分形风格的几何形状和其他看似非常智能的自动机。它们也被用于非常准确地模拟现实生活过程,请参阅:http://en.wikipedia.org/wiki/Cellular_automaton

答案 3 :(得分:2)

确定Conways Game of Life中的邻居是微不足道的。整个细胞自动机只是一个很大的2D阵列,因此您可以通过递增/递减坐标来查找相邻的项目。细节取决于实现语言,但您可能有一些类似于以下代码的代码......

count := previous[x-1,y] + previous[x+1,y] + previous[x,y-1] + previous[x,y+1];
next [x,y] := 1 if ((count >= MIN) and (count <= MAX)) else 0;

我掩饰的一个问题是边界检查 - 确保只使用范围内的坐标。细胞自动机通常是为了速度而构建的,所以你可能不会在内部循环中放置检查 - 你可以使用特殊的大小写代码来完成角落和沿着边缘循环。

这不是我称之为查找对象邻居的算法。解决最近邻居问题的一种方法是基于Voronoi diagram构建索引。

答案 4 :(得分:1)

它被称为生命游戏,你可以找到更多关于它的信息here。但是,我不知道算法的名称。