选择题
1.包含数字0到8的不相交集的数组表示由{1,-4,1,1,-3,4,4,8,-2}给出。然后将包含6和8的两个集合合并(按大小合并) ,得到的根的索引和存储在根中的值是:
选项
A 1 and -6
B 4 and -5
C 8 and -5
D 8 and -6
2.不相交集的数组表示由{4,6,5,2,-3,-4,3}给出。如果元素的编号从1到7,那么通过按大小和路径压缩调用 Union (Find (7) ,Find (1))后得到的数组是:
选项
A { 4, 6, 5, 2, 6, -7, 3 }
B { 4, 6, 5, 2, -7, 5, 3 }
C { 6, 6, 5, 6, -7, 5, 5 }
D { 6, 6, 5, 6, 6, -7, 5 }
3.不相交集的数组表示由{2,-4,2,3,-3,5,6,9,-2}给出。请记住,元素的编号是从1到9。使用 Union-by-size 调用 Union (Find (4) ,Find (6))之后,结果数组中的哪些元素将被更改?
选项
A a. elements of index 2 and 5
B a. elements of index 2 and 6
C a. elements of index 4 and 5
D a. elements of index 4 and 6
4.In a disjoint set problem, given a set of m elements S = { 1, 2, 3, …, m } and n ( 0<n<m ) distinct relations, the set S must have __ equivalence classes.
选项
A at leatst m
B exactly n
C exactly m−n
D at least m−n
5.已知不相交集合用数组表示为{ 4, 6, 5, 2, -3, -4, 3 }。若集合元素从1到7编号,则调用Union(Find(7),Find(1))(按规模求并,并且带路径压缩)后的结果数组为:
选项
A { 4, 6, 5, 2, 6, -7, 3 }
B { 4, 6, 5, 2, -7, 5, 3 }
C { 6, 6, 5, 6, -7, 5, 5 }
D { 6, 6, 5, 6, 6, -7, 5 }
6.若并查集用树表示,其中有n个结点,查找一个元素所属集合的算法的时间复杂度为____。
选项
A O(log2n)
B O(n)
C O(n2)
D O(nlog2n)
7.在不相交集合问题中,给定一组 m 元素 S = {1,2,3,... ,m }和 n (0 < n < m)不同的关系,集合 S 必须有 _ _ 等价类。
选项
A at leatst m
B exactly n
C exactly m−n
D at least m−n
填空题
1.本题要求给出下列并查集操作执行后,集合数组内存储的结果。
union( find(4), find(6) )
union( find(2), find(7) )
union( find(0), find(4) )
union( find(7), find(6) )
union( find(7), find(1) )
1
2
3
4
5
注意:这里假设按规模求并(若两集合规模相等,则把第1个集合的根结点作为结果的根结点),并且用带路径压缩的查找。对所有的0≤i≤7,S[i]被初始化为−1。
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
S[i] | 4 | 4 | 4 | -1 | -6 | -1 | 4 | 2 |
程序填空题
1.请填空完成下列代码,功能是实现并查集中的“查”,并且带路径压缩。
SetType Find ( ElementType X, DisjSet S )
{
ElementType root, trail, lead;
for ( root = X; S[root] > 0; root = S[root]) ;
for ( trail = X; trail != root; trail = lead ) {
lead = S[trail] ;
S[trail] = root;
}
return root;
}