Question

In: Computer Science

minimum spanning tree: find a connected subgraph whose total edge cost is minimized (python code)

minimum spanning tree: find a connected subgraph whose total edge cost is minimized (python code)

Solutions

Expert Solution

# Python program for Kruskal's algorithm to find

# Minimum Spanning Tree of a given connected,

# undirected and weighted graph

  

from collections import defaultdict

  

#Class to represent a graph

class Graph:

  

    def __init__(self,vertices):

        self.V= vertices #No. of vertices

        self.graph = [] # default dictionary

                                # to store graph

          

   

    # function to add an edge to graph

    def addEdge(self,u,v,w):

        self.graph.append([u,v,w])

  

    # A utility function to find set of an element i

    # (uses path compression technique)

    def find(self, parent, i):

        if parent[i] == i:

            return i

        return self.find(parent, parent[i])

  

    # A function that does union of two sets of x and y

    # (uses union by rank)

    def union(self, parent, rank, x, y):

        xroot = self.find(parent, x)

        yroot = self.find(parent, y)

  

        # Attach smaller rank tree under root of

        # high rank tree (Union by Rank)

        if rank[xroot] < rank[yroot]:

            parent[xroot] = yroot

        elif rank[xroot] > rank[yroot]:

            parent[yroot] = xroot

  

        # If ranks are same, then make one as root

        # and increment its rank by one

        else :

            parent[yroot] = xroot

            rank[xroot] += 1

  

    # The main function to construct MST using Kruskal's

        # algorithm

    def KruskalMST(self):

  

        result =[] #This will store the resultant MST

  

        i = 0 # An index variable, used for sorted edges

        e = 0 # An index variable, used for result[]

  

            # Step 1: Sort all the edges in non-decreasing

                # order of their

                # weight. If we are not allowed to change the

                # given graph, we can create a copy of graph

        self.graph = sorted(self.graph,key=lambda item: item[2])

  

        parent = [] ; rank = []

  

        # Create V subsets with single elements

        for node in range(self.V):

            parent.append(node)

            rank.append(0)

      

        # Number of edges to be taken is equal to V-1

        while e < self.V -1 :

  

            # Step 2: Pick the smallest edge and increment

                    # the index for next iteration

            u,v,w = self.graph[i]

            i = i + 1

            x = self.find(parent, u)

            y = self.find(parent ,v)

  

            # If including this edge does't cause cycle,

                        # include it in result and increment the index

                        # of result for next edge

            if x != y:

                e = e + 1     

                result.append([u,v,w])

                self.union(parent, rank, x, y)            

            # Else discard the edge

  

        # print the contents of result[] to display the built MST

        print "Following are the edges in the constructed MST"

        for u,v,weight in result:

            #print str(u) + " -- " + str(v) + " == " + str(weight)

            print ("%d -- %d == %d" % (u,v,weight))

  

# Driver code

g = Graph(4)

g.addEdge(0, 1, 10)

g.addEdge(0, 2, 6)

g.addEdge(0, 3, 5)

g.addEdge(1, 3, 15)

g.addEdge(2, 3, 4)

  

g.KruskalMST()


Related Solutions

Give the entire code for Minimum spanning tree using Boruvka's algorithm in java (not copy-pasted from...
Give the entire code for Minimum spanning tree using Boruvka's algorithm in java (not copy-pasted from any other website)
Prove that Kruskal’s algorithm finds a minimum weight spanning tree.
Prove that Kruskal’s algorithm finds a minimum weight spanning tree.
Suppose T is a minimal spanning tree found by Prim’s algorithm in a connected graph G....
Suppose T is a minimal spanning tree found by Prim’s algorithm in a connected graph G. (i) Show that either T contains the n-1 smallest edges, or the n-1 smallest edges form a subgraph which contains a cycle. (ii) Show that if an edge (a, b) is not in T and if P is the unique path in T from a to b, then for each edge e in P the weight of e is less than the weight of...
Java programming Trace the algorithm for minimum spanning tree (eager, lazy Prim algorithm)
Java programming Trace the algorithm for minimum spanning tree (eager, lazy Prim algorithm)
how to write a code with python function trying to find minimum difference between any two...
how to write a code with python function trying to find minimum difference between any two elements in a list
True and False 1) Average total cost and average variable cost are minimized at the same...
True and False 1) Average total cost and average variable cost are minimized at the same level of output. 2) When marginal cost is between average variable cost and average total cost, marginal cost is increasing. 3) Average total cost of producing 100 units of output is $5. If the marginal cost of producing the 101st unit is $4, then average total cost of 101 units is less than $5. 4) Average variable costs fall continuously as quantity of output...
AVL tree; Insert and Range Minimum operation in Java code.
AVL tree; Insert and Range Minimum operation in Java code.
In this assignment you will start with Python code that builds a 2 host network connected...
In this assignment you will start with Python code that builds a 2 host network connected by a legacy router. You will modify it such that the two hosts can send packets to each other. It requires that you understand subnet addressing and the function of a router. The network built using Miniedit on a Mininet virtual machine: python mininet/examples/miniedit.py. We need to also make 6 static routes to make the program work. This is the work that I have...
Write code in Python: The edge-detection function (detectEdges) described in Chapter 7 and shown below returns...
Write code in Python: The edge-detection function (detectEdges) described in Chapter 7 and shown below returns a black and white image. Think of a similar way to transform color values so that the new image is still in its original colors but the outlines within it are merely sharpened. Then, define a function named sharpen that performs this operation. The function should expect an image and two integers as arguments. One integer should represent the degree to which the image...
Find the minimum energy for a neutron in a uranium nucleus whose diameter is 15fm.
Find the minimum energy for a neutron in a uranium nucleus whose diameter is 15fm.    
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT