如何在不相交的集合数据结构中创建集合和解决联合?

时间:2018-02-09 16:21:46

标签: data-structures unions disjoint-sets

我在计算以下问题的输出时遇到问题,我必须在测验中解决这个问题。代码是: -

Consider the following program:
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))

假设不相交集数据结构实现为数组({\ tt smallest} [1 \ dots 12]):( {\ tt smallest} [i])等于包含的集合中的最小元素( i)中。

以下程序的输出是什么?作为答案,输入以空格分隔的四个整数。

经过计算,我得到了答案为1 1 2 1,但它显示为不正确。什么是正确答案??

3 个答案:

答案 0 :(得分:0)

对于这样小的输入,您可以手动构建集合并获取

1 6 9
2 10 12
3 4 5 7 8 11

所以只有第一个和最后一个答案是正确的

答案 1 :(得分:0)

因为联盟具有规则:如果rank [i_id]> rank [j_id]:在i下分配j。 我们将得到@MBo提到的集合,因此答案是1 3 3 1

答案 2 :(得分:0)

第一个不交集:1-6-9名称设置为1,
第二个不相交集:2-10-12名称设置为2,
第三个不交集:3-4-5-7-8-11名称设置为3

print(Find(6)) : In set 1
print(Find(3)) : In set 3
print(Find(11)) : In set 3
print(Find(9)) : In set 1

答案:1 3 3 1