问题与数据结构课程中的集合和联合有关
考虑以下程序:
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,但这是错误的。
答案 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的实际实施相匹配。任何实现都会生成相同的集合,但是它们的顶级父集合会有所不同。