首先,我有一个 N*N 的距离矩阵,对于每个点,我计算了它的最近邻居,所以我们得到了一个 N*2 的矩阵,看起来像是这样:this:
当然,我们可以先将N * 2矩阵转换为标准图表示,并执行BFS / DFS以获取连接的组件。
但是,考虑到这种特殊图的特点,是否有其他快速完成工作的方法?
我会非常感激。
更新:
我已经为此“情况”实现了一个简单的算法here。
看,我没有使用并查集算法,因为数据结构可能会使事情变得不那么容易,而且我怀疑它是否是我情况下最快的方法(我指实际上)。
您可以争论_merge过程可能很耗时,但是如果我们在分配新标签时将边缘交换到连续的位置,合并可能成本很小,但需要另外N个空间来跟踪原始索引。
第二列是最近邻居的索引。因此,这是一种特殊的有向图,每个顶点仅有一个出度。0 -> 1 1 -> 2 2 -> 3 3 -> 2 4 -> 2 5 -> 6 6 -> 7 7 -> 6 8 -> 6 9 -> 8
当然,我们可以先将N * 2矩阵转换为标准图表示,并执行BFS / DFS以获取连接的组件。
但是,考虑到这种特殊图的特点,是否有其他快速完成工作的方法?
我会非常感激。
更新:
我已经为此“情况”实现了一个简单的算法here。
看,我没有使用并查集算法,因为数据结构可能会使事情变得不那么容易,而且我怀疑它是否是我情况下最快的方法(我指实际上)。
您可以争论_merge过程可能很耗时,但是如果我们在分配新标签时将边缘交换到连续的位置,合并可能成本很小,但需要另外N个空间来跟踪原始索引。