Na maioria das (todas?) Implementações do Fast Multipole Method (FMM), os octrees são usados para decompor o domínio relevante. Teoricamente, os octrees fornecem um limite volumétrico simples, útil para provar o tempo de execução O (n) de um FMM. Além dessa lógica teórica, há benefícios em usar um Octree sobre outras estruturas de árvore ou dados?
Determinar a lista de interação pode ser mais fácil com uma octree, porque uma célula conhecerá seus vizinhos imediatos. No entanto, a lista de interação é desnecessária usando um percurso de árvore mais dinâmico como o Dual Tree Traversal .
Uma alternativa seria uma árvore kd. Uma possível desvantagem teórica é que a construção requer operações medianas caras de busca. No entanto, existem versões do kd-trees que não exigem descoberta mediana durante a construção - embora com particionamento de espaço menos eficiente. Em termos de implementação, uma árvore kd é muito simples.
Uma alternativa ainda mais radical pode ser uma árvore-R .
Então, minha pergunta é: o que acontece com o Octrees que os torna a melhor escolha para um FMM?