避免双循环

时间:2015-01-28 21:38:53

标签: loops data-structures nested-loops

我想知道是否有更好的方法来做到这一点。

我在nbody gravity sim中有一个嵌套循环,其中球列表中的每个球都检查所有球以获得距离/质量并对球的矢量施加重力。

类似的东西:

for(int i = 0; i < balls.size(); i++){
    for(int j = 0; j < balls.size(); j++){
       balls.get(i).applyForce(balls.get(j));
    }
}

我可以使用不同的数据结构来帮助我避免双循环吗?

我知道这是一个非常普遍的问题,我只是在向正确的方向提示之后。

1 个答案:

答案 0 :(得分:2)

鉴于您正在测试元素列表,并且它与每个其他元素的关系 - 您正在讨论O(N ^ 2)算法。所以不,不是真的。

您可能取得的最好成绩是放弃以前测试的关系(如果相关)。如果你正在测试'i'和'j',那么你不需要从零重新迭代。

因此你可以在i+1开始第二个循环,除非你真的需要测试i - &gt; j和j - &gt;一世。