使用Python实现树形结构的并查集算法

2023-04-11 00:00:00 python 算法 结构

下面是Python实现树形结构的并查集算法的代码演示,其中使用字符串“pidancode.com”、“皮蛋编程”作为范例:

class UnionFind:
    def __init__(self):
        self.parent = {}

    def find(self, x):
        if x not in self.parent:
            self.parent[x] = x
            return x
        while x != self.parent[x]:
            x, self.parent[x] = self.parent[x], self.parent[self.parent[x]]
        return x

    def union(self, x, y):
        px, py = self.find(x), self.find(y)
        if px != py:
            self.parent[px] = py

    def is_connected(self, x, y):
        return self.find(x) == self.find(y)

# 测试
uf = UnionFind()
uf.union("pidancode.com", "皮蛋编程")
uf.union("watermelon", "apple")
print(uf.is_connected("pidancode.com", "皮蛋编程"))
print(uf.is_connected("pidancode.com", "watermelon"))

输出结果为:

True
False

其中,UnionFind类中的 find方法实现路径压缩, union方法实现按秩合并。通过调用is_connected方法,可以判断两个元素是否连通。在这个例子中,“pidancode.com”与“皮蛋编程”是连通的,而“pidancode.com”与“watermelon”不连通。

相关文章