我用python制作游戏(特别是使用pygame渲染)在我的物理引擎中我有一个O(n ^ 2)问题。 在我的Engine对象中:
def step():
for obj1 in self.objects:
for obj2 in self.objects:
if obj1.XY != obj2.XY: # You can't have the object bounce itself
obj1,obj2 = Collision(obj1,obj2)
每次游戏循环运行时都会发生这些循环 当有100多个对象(总共迭代10000次)时,嵌套的for循环实际上是在杀死fps。 我想知道是否有更快的方法来迭代所有可能的组合并将函数应用于该对
答案 0 :(得分:3)
解决这个问题的方法是使用更智能的数据结构,这样您的算法就不再是二次方。
一般来看空间分区,特别是四叉树(https://en.wikipedia.org/wiki/Quadtree)(如果您正在进行2D - 3D等价物是八叉树:https://en.wikipedia.org/wiki/Octree)。