我想知道是否有更好的方法来做到这一点。
我在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));
}
}
我可以使用不同的数据结构来帮助我避免双循环吗?
我知道这是一个非常普遍的问题,我只是在向正确的方向提示之后。
答案 0 :(得分:2)
鉴于您正在测试元素列表,并且它与每个其他元素的关系 - 您正在讨论O(N ^ 2)算法。所以不,不是真的。
您可能取得的最好成绩是放弃以前测试的关系(如果相关)。如果你正在测试'i'和'j',那么你不需要从零重新迭代。
因此你可以在i+1
开始第二个循环,除非你真的需要测试i - &gt; j和j - &gt;一世。