联合查找数据结构 - 如何使用make_sets并正确查找

时间:2015-08-15 16:24:58

标签: algorithm graph-algorithm kruskals-algorithm union-find

基本上,除了检查顶点u和v是否在同一个组件中之外,我还尝试通过添加一个条件来修改Kruskal的算法。 我模糊地理解联合查找数据结构是如何工作的,所以我想检查一下我是否真的有了正确的想法。

鉴于我有一个无向图G =(V,E)和一个包含V中的一些顶点的集合A(顶点A⊂V的子集),我想要捕获实例,其中,对于V中的每个顶点u (循环),你也可以在这个集合中找到A. 我在考虑使用:

(Full Kruskal's algorithm omitted)
original_comp = make_sets(V)
A_comp = make_sets(A)
for each edge (u, v) in E:
   if (find(original_comp, u) == find(A_comp, u)):
      // do something

这不起作用,因为set参数不同(因此标签不同)?我只想确认......

为了澄清,我需要知道边(u,v)是否包含集合A中的一个顶点。我试图使用Union-Find来实现这一点(因为find()需要O(1)时间),而不是遍历集合A来比较每个元素...... 谁能告诉我这是否可能?或者我应该只使用数组遍历方法?

谢谢。

0 个答案:

没有答案