假设有n个三维物体(多面体),计算所有物体的交集的最快方法是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 )
这样我们就不必检查两个对象是否相交两次了。我知道我正在迭代的列表中大约有3000个对象。这个算法需要4501500步,而原始算法需要近9000000步。
我有什么遗漏吗?这是我们能得到的最好结果吗?