找到最小生成树成本的最佳方法

问题描述

我在坐标平面上有n个点,形成一个边缘的完整图形权重为abs(x1-x2)+ abs(y1-y2)。我必须找到使用时间复杂度为O(n ^ 2)的Prim算法完成最小生成树的成本,还有更好的方法

解决方法

我有一个需要证明的想法,但我对此很有信心。

首先,我们假设二维点可以由O(n log n)中的R-Tree进行索引,并且可以平均搜索O(log n)中的最近邻居。

那么(我很确定)可以证明,平面中的每个点在最终的最小生成树中仅会连接到其60°扇形最近邻中的一个或多个。在O(log n)中,对于每个点仅存在6个这些邻居(通过稍微调整R-Tree搜索)。因此,您最终得到的是6n条边的缩小图,可以在O(6n)中运行Prim算法。

好的,那么60°扇形最近的邻居是什么? -如果您将点周围的空间划分为6个扇形,每个扇形为60°(例如有6片的比萨饼),然后在每个扇形中搜索最近的邻居。

证明:如果在生成的生成树中将点p连接到不在其60°扇区最近邻居中的另一个点q,则可以通过将q连接到适当的60°扇区来缩短生成树- p的最近邻居。

整个运行时将由构建和查询R-Tree O(n log n)来控制。