在快速多极方法 (FMM) 的大多数(全部?)实现中,八叉树用于分解相关域。从理论上讲,八叉树提供了一个简单的体积界限,这对于证明 FMM 的 O(n) 运行时间很有用。除了这个理论原理之外,使用八叉树比其他树或树数据结构有什么好处吗?
使用八叉树确定交互列表可能更容易,因为单元格会知道它的直接邻居。然而,使用像Dual Tree Traversal这样更动态的树遍历,交互列表是不必要的。
另一种选择是kd-tree。一个可能的理论缺点是构造需要昂贵的中值查找操作。然而,有些版本的 kd-trees 在构造过程中不需要中值查找——尽管空间分区效率较低。在实现方面,kd-tree 非常简单。
一个更激进的替代方案可能是R-tree。
所以,我的问题是:八叉树是什么让它们成为 FMM 的最佳选择?