试设计并实现不相交集合类结构,并写出union和find算法。 集合S上的等价关系R指的是满足自反、对称、传递性质的关系,S中具有等价关系R的元素构成的子集称为等价类,S中所有的等价类构成了集合S的一个划分:S中的每一个元素都在且仅在一个等价类中(等价类之间不相交)。 等价类(集合)作为一种抽象数据类型可以定义两种基本操作:find和union。对于S中的元素x,find(x)返回元素x的等价类名;union(i,j)执行的操作是将等价类i和等价类j合并成一个新的等价类。如果要把(a,b)添加到等价关系R中,即定义S中的元素a和b等价,根据等价关系的定义,实际上是将a所在的等价类和b所在的等价类合并。因此首先要分别对a和b进行find操作,看它们是否在同一个等价类。如果它们不在同一个等价类,则执行union(find(a),find(b))操作,将a和b所在的两个等价类合并为一个新的等价类。这样的操作改变了S的划分方法。