Download Analog and digital C - MinimumSpanningTree .pptx and more Study notes Digital & Analog Electronics in PDF only on Docsity!
Minimum Spanning Tree
- (^) What is a Minimum Spanning Tree.
- (^) Constructing Minimum Spanning Trees.
- (^) What is a Minimum-Cost Spanning Tree.
- (^) Applications of Minimum Cost Spanning Trees.
- (^) Prim’s Algorithm.
- (^) Example.
- (^) Implementation.
- (^) Kruskal’s algorithm.
- (^) Example.
- (^) Implementation.
- (^) Review Questions.
What is a Minimum Spanning Tree.
• Let G = (V, E) be a simple, connected, undirected graph that is not
edge-weighted.
• A spanning tree of G is a free tree (i.e., a tree with no root) with | V | - 1
edges that connects all the vertices of the graph.
• Thus a minimum spanning tree for G is a graph, T = (V’, E’) with the
following properties:
V’ = V
T is connected
T is acyclic.
• A spanning tree is called a tree because every acyclic undirected
graph can be viewed as a general, unordered tree. Because the edges
are undirected, any vertex may be chosen to serve as the root of the
tree.
What is a Minimum-Cost Spanning Tree
• For an edge-weighted , connected, undirected graph, G, the total
cost of G is the sum of the weights on all its edges.
• A minimum-cost spanning tree for G is a minimum spanning tree of
G that has the least total cost.
• Example: The graph
Has 16 spanning trees. Some are:
The graph has two minimum-cost spanning trees, each with a cost of 6:
Applications of Minimum-Cost Spanning Trees
Minimum-cost spanning trees have many applications. Some are:
• Building cable networks that join n locations with minimum cost.
• Building a road network that joins n cities with minimum cost.
• Obtaining an independent set of circuit equations for an electrical
network.
• In pattern recognition minimal spanning trees can be used to find noisy
pixels.
Example
: Trace Prim’s algorithm starting at vertex a
: The resulting minimum-cost spanning tree is
Implementation of Prim’s Algorithm.
• Prims algorithn can be implememted similar to the Dijskra’s
algorithm as shown below:
public static Graph primsAlgorithm(Graph g, Vertex start){ int n = g.getNumberOfVertices(); Entry table[] = new Entry[n]; for(int v = 0; v < n; v++) table[v] = new Entry(); table[g.getIndex(start)].distance = 0; PriorityQueue queue = new BinaryHeap(g.getNumberOfEdges()); queue.enqueue(new Association(new Integer(0), start)); while(!queue.isEmpty()) { Association association = (Association)queue.dequeueMin(); Vertex v1 = (Vertex) association.getValue(); int n1 = g.getIndex(v1); if(!table[n1].known){ table[n1].known = true; Iterator p = v1.getEmanatingEdges(); while (p.hasNext()){ Edge edge = (Edge) p.next(); Vertex v2 = edge.getMate(v1); int n2 = g.getIndex(v2); Integer weight = (Integer) edge.getWeight(); int d = weight.intValue();
Kruskal's Algorithm.
• Kruskal’s algorithm also finds the minimum cost
spanning tree of a graph by adding edges one-by-one.
enqueue edges of G in a queue in increasing order of cost.
T = ;
while(queue is not empty){
dequeue an edge e;
if(e does not create a cycle with edges in T)
add e to T;
return T;
Example for Kruskal’s Algorithm.
Trace Kruskal's algorithm in finding a minimum-cost spanning tree for the
undirected, weighted graph given below:
The minimum cost is: 24
Implementation of Kruskal's Algorithm – Cont’d
public abstract class AbstractGraph implements Graph { public boolean isReachable(String from, String to){ Vertex fromVertex = getVertex(from); Vertex toVertex = getVertex(to); if (fromVertex == null || toVertex==null) throw new IllegalArgumentException("Vertex not in the graph"); PathVisitor visitor = new PathVisitor(toVertex); this.preorderDepthFirstTraversal(visitor, fromVertex); return visitor.isReached(); } private class PathVisitor implements Visitor { boolean reached = false; Vertex target; PathVisitor(Vertex t){target = t;} public void visit(Object obj){ Vertex v = (Vertex) obj; if (v.equals(target)) reached = true; } public boolean isDone(){return reached;} boolean isReached(){return reached;} } }
Prim’s and Kruskal’s Algorithms
Note: It is not necessary that Prim's and Kruskal's algorithm generate the same minimum-cost spanning tree. For example for the graph:
Kruskal's algorithm (that imposes an ordering on edges with equal weights) results
in the following minimum cost spanning tree:
The same tree is generated by Prim's algorithm if the start vertex is any of: A, B, or
D; however if the start vertex is C the minimum cost spanning tree is: