21.1-1
- 问题描述
假设CNNECTED-COMPONENTS作用于一个无向图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) 。请列出在每次执行完第3~5行后各连通分量的顶点。 - 问题解答
处理的边 | 不相交集合 |
---|---|
初始集合 | {a}{b} {c} {d} {e} {f} {g} {h} {i} {j} {k} |
(d,i) | {a} {b} {c} {d,i} {e} {f} {g} {h} {j} {k} |
(f,k) | {a} {b} {c} {d,i} {e} {f,k} {g} {h} {j} |
(g,i) | {a} {b} {c} {d,i,g} {e} {f,k} {h} {j} |
(b,g) | {a} {b,d,i,g} {c} {e} {f,k} {h} {j} |
(a,h) | {a,h} {b,d,i,g} {c} {e} {f,k} {j} |
(i,j) | {a,h} {b,d,i,g,j} {c} {e} {f,k} |
(d,k) | {a,h} {b,d,i,g,j,f,k} {c} {e} |
(b,j) | {a,h} {b,d,i,g,j,f,k} {c} {e} |
(d,f) | {a,h} {b,d,i,g,j,f,k} {c} {e} |
(g,j) | {a,h} {b,d,i,g,j,f,k} {c} {e} |
(a,e) | {a,h,e} {b,d,i,g,j,f,k} {c} |
因此最终的连通分量是{a,h,e}、{b,d,i,g,j,f,k}和{c}。
21.1-2
问题描述
证明:CONNECTED-COMPONENTS处理完所有的边后,两个顶点在相同的连通分量中当且仅当它们在同一个集合中。问题解答
题目的意思就是证明“两个顶点在相同连通分量中”是“两个顶点在同一个集合中”的充分必要条件。
①充分性:
假设u和v是某连通分量的两个顶点,那么必存在一条路径 P={(u,v1),(v1,v2),...,(vn,v)} ,其中 vi∈G.V,(vi,vi+1)∈G.E 。在执行CONNECTED-COMPONENTS的过程中,把一条边上的两个顶点放入同一个集合中,那么路径 P 上所有的点都会放入同一个集合中(当然也包括u,v)。
②必要性:
假设u和v是某个集合中的两个顶点,由充分性的证明过程知连接u和v的一条路径P 上的所有顶点都在该集合中,而这些路径上的边都是存在的,因此u和v是连通的。
21.1-3
问题描述
在CONNECTED-COMPONENTS作用于一个有 k 个连通分量的无向图G=(V,E) 的过程中,FIND-SET需要调用多少次?UNION需要调用多少次?问题解答
在CONNECTED-COMPONENTS中的第3-4行知,G.E的每一条边被处理的过程中都会调用两次FIND-SET,因此共调用 2|E| 次。而UNION每调用一次都会使得连通分量数减1,初始状态的连通分量是 |V| ,终止状态的连通分量是 k ,因此UNION调用的次数是|V|−k 。