Discrete Mathematics October 27, 2004 Roll No. Here is the bucket algorithm already discussed in the class: Bucket-Algorithm (Input: a Graph G, Output: a Bucket B) 1. Put any vertex x of G in the Bucket B 2. While there are branches coming out of the Bucket B 3. Choose an edge (u, v) connecting u in B to v not in B 4. Put v in B Assume that we want to find if a given graph H is connected. We shall use the Bucket algorithm in the following way: Connected Graph Algorithm (Input: Graph H, Output: Yes or No) 1. Run Bucket-Algorithm (H, B) 2. If there exists any vertex of H outside the Bucket B then Return No (It is not connected) Else Return Yes (It is connected) Here is an algorithm to find if a given edge in a given graph is a bridge. EdgeBridge (Input: A Graph and a given edge, Output: Yes or No) 1) Remove the given edge from the given graph. 2) If Connected Graph Algorithm output is Yes then Return No (The edge is not a bridge) Else Return Yes (The edge is a bridge) 1) Design an algorithm to find a bridge in a graph using the suitable building blocks. Do not forget to derive its worst-case time complexity. 2) Design an algorithm to find if a given graph is a tree using the solution of the above part. Again do not forget to derive its time complexity. 3) You can use the same building blocks to find a spanning tree of a graph? Discuss briefly. Derive its time complexity.