n 個の3 次元オブジェクト (多面体) があるとします。すべてのオブジェクトの交差を計算する最速の方法は O(n ^ 2) ですか?
現在、基本的に T(n) を n ^ 2 に等しくするライブラリを使用しています。
for each object: // there are n objects
get list of intersecting objects // this takes n steps
これは文字通り n ^ 2 ステップかかります。
私が考えることができる唯一の高速な方法は、依然として O(n ^ 2) ですが、T(n) = n(n+1) / 2、または (n*n + n) / 2 です。
擬似コードは次のとおりです。
for(int i = 0; i < len(objects) - 1; i++)
for(int j = i + 1; j < len(objects); j++)
if object at i intersects object at j:
object at i . addToIntersectList ( object at j )
object at j . addToIntersectList ( object at i )
この方法では、2 つのオブジェクトが 2 回交差するかどうかを確認する必要がありません。反復処理中のリストには約 3000 個のオブジェクトがあることがわかっています。このアルゴリズムは 4501500 ステップかかりますが、元のアルゴリズムはそのほぼ倍の 9000000 ステップかかります。
何か不足していますか?これは私たちが得ることができる最高のものですか?