algorithm - 在不到 O(n^2) 的时间内模拟许多物体之间的重力

标签 algorithm simulation

我正在用 n 个粒子编写一个模拟,这些粒子都“在引力上”相互吸引。为了计算每个粒子上的力,我遍历了一个粒子列表。对于列表中的每个粒子,我遍历同一个列表,计算由于每个其他粒子引起的重力加速度,并将每个加速度添加到该粒子上的净力。

虽然此算法有效并且或多或少准确,但它的执行时间为 O(n^2)。是否存在更快的算法?

最佳答案

对于非常多的 N,通过创建网格来近似 n 体引力可能会更快,然后为该网格上的每个点计算所有粒子施加的平均引力。然后,您可以针对每个粒子查看最近的几个网格点,并从中估算粒子上的总引力。但是,如果网格上的总点数小于粒子数,这只会更快。

其他一些方法是 Barnes–Hut 模拟和快速多极方法,但这些方法会随着时间累积误差。

但是,根据模拟的时间长短,您无论如何都会开始累积误差,因为(几乎)计算机中的所有非整数都是近似值。

关于algorithm - 在不到 O(n^2) 的时间内模拟许多物体之间的重力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44812631/

相关文章:

java - JVM 中这些时序问题的原因是什么?

simulation - 2D 光线追踪

r - Stan 中指数随机变量的模拟(RStan 包/接口(interface))

haskell - 在 Haskell 中共享力的计算

python - 使用嵌套列表索引列表

algorithm - 最短位序列逻辑

algorithm - 在放气算法中确定 block 大小的一些好的策略是什么?

networking - NetSim模拟器的config.txt文件中出现错误

algorithm - 计算prestashop中承载模块的多个产品的盒子尺寸

c - 查找仅具有单个设置位且总和等于给定数字的数字的最佳算法是什么?