Disjoint Set - 并查集
并查集
拥有个元素的集合分为两个家庭。每个家族只有唯一一个祖先,相同家庭的元素拥有相同的祖先。因此集合中的每个元素的祖先只有种可能。并查集是一种适合元素分类的高效树形数据结构,支持快速分类和查询。
设为的父节点,设为的祖先节点。当时称为祖先节点。
对于拥有个成员的集合,将其分成两个家庭和。初始时令每个成员的父亲都是自己,如图所示:
当声明个成员和()属于同一家庭,令的节点祖先为的父亲(也可以反过来),即。这样的操作会使元素更接近祖先节点,从而缩短了递归向上查找的路径长度,该操作也称为压缩路径。
下面对上图中的集合进行具体演示:
声明和属于同一家庭,设置;
声明和节点属于同一家庭,设置;
声明和节点属于同一家庭,设置;
声明和节点属于同一家庭,设置;
声明和节点属于同一家庭,设置;
声明和节点属于同一家庭,设置;
声明和节点属于同一家庭,设置;
声明和节点属于同一家庭,设置;
合并两节点和时,根据固定规则设置(或者相反);查询节点的祖宗节点时,若则设置。并查集的分类、查询操作的时间复杂度接近。