私は n 体重力システムをシミュレートするプログラムを書いています。その精度は、各ステップの間の「時間」のステップの小ささに応じて任意に良好です。現在、最大 500 個のボディに対して非常に高速に実行されますが、その後は非常に遅くなります。これは、反復ごとにボディの各ペア間に適用される力を決定するアルゴリズムを実行する必要があるためです。これは n(n+1)/2 = O(n^2) の複雑さなので、非常に急速に悪化することは驚くべきことではありません。最もコストのかかる操作は、平方根をとって各ペア間の距離を決定することだと思います。したがって、疑似コードでは、これが私のアルゴリズムの現在の実行方法です。
for (i = 1 to number of bodies - 1) {
for (j = i to number of bodies) {
(determining the force between the two objects i and j,
whose most costly operation is a square root)
}
}
それで、これを最適化する方法はありますか?過去の反復で使用された距離を高速に変更して再利用するための優れたアルゴリズムはありますか? この問題を軽減する損失の多い方法はありますか? おそらく、x または y 座標 (2 次元) が質量の積によって決まる特定の量を超えるオブジェクト間の関係を無視することによってでしょうか? とりとめのないように聞こえる場合は申し訳ありませんが、これを高速化するためにできることはありますか? 任意の精度を維持したいのですが、少し精度を犠牲にしてこの問題の複雑さを軽減できる解決策がある場合は、それを聞いてみたいと思います。
ありがとう。