为什么八叉树用于多极空间分解?

计算科学 算法
2021-12-13 22:23:05

在快速多极方法 (FMM) 的大多数(全部?)实现中,八叉树用于分解相关域。从理论上讲,八叉树提供了一个简单的体积界限,这对于证明 FMM 的 O(n) 运行时间很有用。除了这个理论原理之外,使用八叉树比其他树或树数据结构有什么好处吗?

使用八叉树确定交互列表可能更容易,因为单元格会知道它的直接邻居。然而,使用像Dual Tree Traversal这样更动态的树遍历,交互列表是不必要的。

另一种选择是kd-tree。一个可能的理论缺点是构造需要昂贵的中值查找操作。然而,有些版本的 kd-trees 在构造过程中不需要中值查找——尽管空间分区效率较低。在实现方面,kd-tree 非常简单。

一个更激进的替代方案可能是R-tree

所以,我的问题是:八叉树是什么让它们成为 FMM 的最佳选择?

1个回答

上面的评论给出了使用八叉树的一些很好的理由(即,在每个维度上递归地减半计算立方体,而不是更一般的正交二分法)。计算交互列表的对称性和简单性是一大优势。

我会争辩说,八叉树带来的最重要的特征可能是,支持 FMM 的加法定理在一个或多个“缓冲区”的极其简单的良好分离标准下系统地满足了与几何无关的远区交互盒子。换句话说,保证势场的 FMM 和表示在非病理情况下以递增的顺序收敛。