我正在编写一个模拟n
粒子,这些粒子都是重力的"互相吸引。为了计算每个粒子上的力,我迭代了一个粒子列表。对于列表中的每个粒子,我遍历相同的列表,计算由于每个其他粒子引起的重力加速度,并将每个加速度添加到该粒子上的净力。
虽然该算法有效并且或多或少准确,但它具有O(n ^ 2)执行时间。是否存在更快的算法?
答案 0 :(得分:1)
对于非常高数量的N,通过创建网格来近似n体重力可能更快,然后计算该网格上的每个点所有粒子施加的平均重力。然后,您可以在每个粒子上查看最近的几个网格点,并估算粒子上的总重力。但是,如果网格上的总点数小于粒子数,则只会更快。
其他一些方法是Barnes-Hut模拟和快速多极方法,但这些方法会随着时间累积误差。
但是,根据模拟的长度,无论如何都会开始构建错误,因为(几乎)计算机中的所有非整数都是近似值。