我已经尝试了20次此问题,但仍然没有得到答案

时间:2019-04-06 05:08:32

标签: algorithm data-structures set

问题与数据结构课程中的集合和联合有关

考虑以下程序:

for i from 1 to 12:
  Makeset(i)

Union(2, 10)

Union(7, 5)

Union(6, 1)

Union(3, 4)

Union(5, 11)

Union(7, 8)

Union(7, 3)

Union(12, 2)

Union(9, 6)

print(Find(6))

print(Find(3))

print(Find(11))

print(Find(9))

这个问题我得到9 7 7 9,但这是错误的。

1 个答案:

答案 0 :(得分:0)

我搜索了Union-Find并使用了DisjointSet算法。

在联合调用之后,生成以下3组:

7 -> 5, 8, 3
5 -> 11
3 -> 4

9 -> 6
6 -> 1

12 -> 2
2 -> 10

查找(6),查找(3),查找(11),查找(9)

这些呼叫中的每一个都从该号码中找到最上一位,因此结果是:9、7、7、9 但。假设我的Union实施与Union的实际实施相匹配。任何实现都会生成相同的集合,但是它们的顶级父集合会有所不同。