【发布时间】:2012-04-23 14:14:18
【问题描述】:
我正在为一个小型 2D 游戏编写物理程序,我需要检查屏幕上的每个对象与屏幕上的所有其他对象。那是O(N^2),我不太喜欢。
我的想法:
for (var i = 0; i < objects.length; i ++)
for (var j = 0; j < objects.length; j ++)
if (collide(objects[i], objects[j])) doStuff(objects[i], objects[j]);
这是不必要的,我将多次检查相同的对象。我怎样才能避免这种情况?我想有一个矩阵,这将是n*n(假设n是对象的数量),然后每次我访问一对对象时我都会这样做:
visited[i][j] = 1;
visited[j][i] = 1;
然后,我将始终知道我访问了哪对对象。
这可行,但是,我需要再次设置所有这些单元格,n*n 次,只是在开始时将它们全部设置为 0!也许,我可以将所有内容设置为[],但这对我来说似乎仍然不是一个可行的解决方案。有更好的吗?
显然,我选择的语言是 Javascript,但我对 C、C++ 和 Python 的了解比较流利,所以你可以用它们回答(虽然 Javascript、C 和 C++ 的语法几乎相同)。
【问题讨论】:
-
如果性能是一个问题,您可能想开始使用四叉树。
-
我觉得没必要……屏幕上通常有
-
在那种情况下,是的,这不值得麻烦。
标签: javascript arrays performance algorithm matrix