假设有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 )
这样我们就不必检查两个对象是否相交两次。我知道我正在迭代的列表中有大约 3000 个对象。该算法需要 4501500 步,而原始算法需要将近两倍,即 9000000 步。
我错过了什么吗?这是我们能得到的最好的吗?