0%

【习题解答】 并查集与动态等价关系

注: 本题解为个人完成,难免有疏漏,请勿抄袭,仅供参考,同时欢迎留言指正。 ## 15.1 ### (1) 基于矩阵的算法实现: + 矩阵每个位置存放着两个元素的等价关系 + 初始化矩阵的时候考虑自反性 + 判断两个元素是不是在一个并查集中,开销 + 两个元素并操作,,先遍历的第行,对于满足,把第行加到第行;再遍历的第行,对于满足,把第行加到第行;

正确性证明:主要考虑,是不是同一个等价类中任意一对元素,在矩阵中都是,那么用数学归纳法证明,因为查不会改变矩阵,那么对并操作进行归纳推理。 + 初始情况,满足 + 假设进行了次并操作,命题成立,则再进行一次并,两个元素各自所在的等价类的内部自然已经满足命题,那么再考虑从两个等价类中分别取一个元素,在算法完成后矩阵对应位置改成了

时间复杂性:每次最多是线性遍历2次,算法复杂度,开销主要是矩阵的行运算

(2)

基于数组的算法实现: + 数组每个位置存放对应代表元的下标 + 查操作,即反复查找其代表元,直到到达根为止,单次查最坏情况是线性的 + 并操作,即找到的根下标,然后把p挂到q上,即令,单次操作复杂度最坏情况也是线性的 + 总的复杂度是

15.3

利用并查集来解决: + 起始的时候每个变量自身构成一个等价类 + 每个等式对应一个并操作 + 然后对所有不等式进行查操作,若发现某不等式的两边的变量,出现在一个等价类中,那么矛盾。

复杂度分析: + m个约束,对应着m次并查的操作 + n个变量,对应着并查集的n元素 + 最坏情况时间复杂度,近似是