首先,我得到了一个 N*N 距离矩阵,对于每个点,我计算了它的最近邻,所以我们有一个 N*2 矩阵,看起来像这样:
0 -> 1 1 -> 2 2 -> 3 3 -> 2 4 -> 2 5 -> 6 6 -> 7 7 -> 6 8 -> 6 9 -> 8
第二列是最近邻居的索引。所以这是一种特殊的有向图,每个顶点只有一个出度。
当然,我们可以先将 N*2 矩阵转换为标准的图表示,然后执行 BFS/DFS 得到连通分量。
但是,鉴于这个特殊图表的特点,还有其他快速的方法来完成这项工作吗?
我将不胜感激。
更新:
我在这里为这种情况 实现了一个简单的算法。
看,我没有使用联合查找算法,因为数据结构可能会让事情变得不那么容易,而且我怀疑这是否是我案例中最快的方法(我的意思是实际上)。
您可能会争辩说 _merge 过程可能很耗时,但如果我们在分配新标签的同时将边缘交换到连续位置,合并可能会花费很少,但它需要另外 N 个空间来跟踪原始索引。