【笔记】
设x表示一个对象,我们希望有以下操作:
MAKE-SET(x):建立一个新的集合,唯一成员就是x。
UNION(x,y):将包含x和y的动态集合合并为一个新的集合。
FIND-SET(x):返回一个指针,指向包含x的唯一集合的代表。
一个应用
查询两个定点是否在同一连通子图。
【练习】
21.1-1 假设作用于一个无向图G=(V,E),此处V={a,b,c,d,e,f,g,h,i,j,k},并且以如下次序对E的边进行处理:(d,i),(f,k),(g,i),(b,g),(a,h),(i,j),(d,k),(b,j),(d,f),(g,j),(a,e)。请列出在每次执行后各连通子图中的顶点。
略
21.1-2 证明:在CONNECTED-COMPONENTS处理了所有的边后,两个顶点在同一个连通子图中,并且仅当它们在同一个集合中。
若它们在同一个集合中,则必有一条路径连接两点,因此在同一个连通子图中。
21.1-3 在CONNECTED-COMPONENTS作用于一个包含k个连通子图的无向图G=<V,E>的过程中,要调用FIND-SET多少次?要调用UNION多少次?
FIND-SET 2*|E|
UNION |V-k|