東京大学 情報理工学系研究科 コンピュータ科学専攻 2023年8月実施 専門科目 問題3
Author
Description
Let be an undirected graph with no self-loops (edges joining the same vertex) nor multi-edges (two or more edges joining the same two vertices), with , . If there is a vertex in a connected graph such that after deleting , the resulting graph is not connected, we call a cut vertex of .
Answer the following questions:
(1) Describe an algorithm to check whether or not is connected. Estimate the time complexity of the algorithm.
(2) Describe a time algorithm to find a spanning tree , given a connected graph .
(3) Let be a spanning tree of a connected graph , and assume that is a non-leaf node of (i.e., the degree of in is at least two) and that is not a cut vertex of . Let be an edge of that is incident with . Prove that one can obtain another spanning tree of from by replacing with another edge of .
(4) Describe a time algorithm, given a connected graph , to find all cut vertices of .
设 为一个无向图,该图没有自环(连接到同一顶点的边)也没有重边(连接同一对顶点的两个或更多边),且 ,。如果在一个连通图 中有一个顶点 ,使得删除 后所得的图不再连通,我们称 为 的割点。
回答以下问题:
(1) 描述一个算法来检查 是否连通。估计该算法的时间复杂度。
(2) 描述一个 时间的算法,给定一个连通图 ,找到一棵生成树 。
(3) 设 为连通图 的一棵生成树,并假设 是 的一个非叶节点(即 在 中的度数至少为二),并且 不是 的割点。令 为 中与 相邻的一条边。证明通过用 的另一条边 替换 ,可以得到 的另一棵生成树。
(4) 描述一个 时间的算法,给定一个连通图 ,找到 的所有割点。
Kai
(1)
Algorithm
To check whether the graph is connected, you can perform a Depth-First Search (DFS) or Breadth-First Search (BFS) starting from any vertex . The algorithm proceeds as follows:
- Start from an arbitrary vertex and perform DFS or BFS.
- Mark all visited vertices during the search.
- After the search is complete, check if all vertices have been visited.
If all vertices are visited, then the graph is connected; otherwise, it is not.
Time Complexity
- The time complexity of both DFS and BFS is , where and . This is because, in the worst case, you will visit every vertex and every edge exactly once.
(2)
Algorithm
To find a spanning tree for a connected graph , you can use a Depth-First Search (DFS) or Breadth-First Search (BFS):
- Start from an arbitrary vertex and initialize as an empty set of edges.
- Perform DFS or BFS, adding each edge traversed to until all vertices are visited.
- The resulting set of edges forms a spanning tree.
Time Complexity
- The time complexity of this algorithm is because each edge is considered exactly once.
(3)
Proof
Let be a spanning tree of and be a non-leaf node in . Suppose is not a cut vertex of and is an edge incident to in .
- Since is not a cut vertex, removing from does not disconnect the graph. Therefore, there exists another path in that connects the components formed by the removal of .
- Let be an edge in that connects two components of .
- Adding edge to will create a cycle because is a spanning tree.
- Remove from the cycle, and you will obtain a new spanning tree . The edge replaces , forming , which is also a spanning tree.
Thus, replacing edge with gives another spanning tree.
(4)
Algorithm
To find all cut vertices of efficiently, we can use a Depth-First Search (DFS) based algorithm, known as Tarjan's algorithm:
- Perform a DFS traversal of , numbering the vertices in the order they are visited.
- For each vertex , maintain two values:
- DFS number: The order in which the vertex was visited.
- Low number: The lowest DFS number reachable from using back edges.
- A vertex is a cut vertex if:
- It is the root of the DFS tree and has more than one child.
- It is not the root, and there is a child such that no vertex in the subtree rooted at can reach a vertex higher up in the DFS tree than .
Time Complexity
- The time complexity of Tarjan's algorithm is , which is much more efficient than .
Knowledge
DFS 图论 连通性 生成树 割点 切点
解题技巧和信息
- 图的连通性检查: DFS 和 BFS 是检查图的连通性的基本工具。
- 生成树构造: DFS 或 BFS 都可以用来构造图的生成树,时间复杂度为 。
- 割点的寻找: Tarjan 算法是寻找割点的经典算法,其时间复杂度为 ,适合大规模图的处理。
重点词汇
- Cut vertex: 割点
- Spanning tree: 生成树
- Depth-First Search (DFS): 深度优先搜索
- Connected graph: 连通图
参考资料
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. "Introduction to Algorithms." MIT Press, Chapter 22, "Elementary Graph Algorithms".
- Robert Tarjan, "Depth-First Search and Linear Graph Algorithms", SIAM Journal on Computing, 1972.