如何用union-find确定传递关系

时间:2015-10-24 13:25:51

标签: algorithm data-structures union-find

我有以下数据集

if

现在如何使用union-find确定5是否与7相关?有人请指导我。

1 个答案:

答案 0 :(得分:1)

您不必在此使用Union-Find。您可以使用基本DFS标记一个连接组件中的每个访问顶点,以及在此组件中从中开始DFS的顶点的索引。此方法在输入大小方面是线性的,因此它总是比Union-Find的任何实现都快。

但是,如果您希望Union-Find按照输入中的每个边x-y进行操作,请致电Union(x, y)。在处理完所有边之后,如果要查明顶点a是否与a顶点b相关,即是否存在由a开始的边连接的顶点序列,以b结尾,只需检查是否Find(a) == Find(b)。此方法的复杂性取决于您实现Union-Find数据结构的方式。最佳实现实现了几乎线性的时间,实际上这被认为是线性算法。