Kruskal's algorithm is used to find the minimum spanning tree of a connected, undirected graph. It works by sorting all the edges by weight and then going through each edge, adding it to the tree if it does not form a cycle. This results in a tree containing all the vertices of the original graph using the minimum total edge weight without cycles. The time complexity is O(ElogE) and space is O(E+V) where E is the number of edges and V is the number of vertices.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
40 views
Kruskals Algorithm
Kruskal's algorithm is used to find the minimum spanning tree of a connected, undirected graph. It works by sorting all the edges by weight and then going through each edge, adding it to the tree if it does not form a cycle. This results in a tree containing all the vertices of the original graph using the minimum total edge weight without cycles. The time complexity is O(ElogE) and space is O(E+V) where E is the number of edges and V is the number of vertices.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 2
uid: kruskals-algorithm
name: Kruskal's Algorithm
category: Famous Algorithms difficulty: 3 prompt: You're given a list of edges representing a weighted, undirected graph with at least one node. The given list is what's called an adjacency list, and it represents a graph. The number of vertices in the graph is equal to the length of edges, where each index i in edges contains vertex i's siblings, in no particular order. Each of these siblings is an array of length two, with the first value denoting the index in the list that this vertex is connected to, and and the second value denoting the weight of the edge. Note that this graph is undirected, meaning that if a vertex appears in the edge list of another vertex, then the inverse will also be true (along with the same weight). Write a function implementing Kruskal's Algorithm to return a new edges array that represents a minimum spanning tree. A minimum spanning tree is a tree containing all of the vertices of the original graph and a subset of the edges. These edges should connect all of the vertices with the minimum total edge weight and without generating any cycles. If the graph is not connected, your function should return the minimum spanning forest (i.e. all of the nodes should be able to reach the same nodes as they could in the initial edge list). Note that the graph represented by edges won't contain any self-loops (vertices that have an outbound edge to themselves) and will only have positively weighted edges (i.e., no negative distances). If you're unfamiliar with Kruskal's algorithm, we recommend watching the Conceptual Overview section of this question's video explanation before starting to code. If you're unfamiliar with the Union Find data structure, we recommend completing that problem before attempting this one. Sample Input edges = [ [[1, 3], [2, 5]], [[0, 3], [2, 10], [3, 12]], [[0, 5], [1, 10]], [[1, 12]] ] Sample Output [ [[1, 3], [2, 5]], [[0, 3], [3, 12]], [[0, 5]], [[1, 12]] ] spaceTime: O(e * log(e)) time | O(e + v) space - where e is the number of edges in the input edges and v is the number of vertices tests: {edges:[[[1,1]],[[0,1]]]} {edges:[[[1,1]],[[0,1],[2,2]],[[1,2]]]} {edges:[[[1,3],[2,5]],[[0,3],[2,10],[3,12]],[[0,5],[1,10]],[[1,12]]]} {edges:[[[1,3],[2,5]],[[0,3],[2,10],[3,12],[4,1]],[[0,5],[1,10],[4,7]],[[1,12]], [[1,1],[2,7]]]} {edges:[[[1,3],[2,5]],[[0,3],[2,10],[3,12],[4,1]],[[0,5],[1,10],[4,7]],[[1,12], [4,11]],[[1,1],[2,7],[3,11]]]} {edges:[[[1,7]],[[0,7],[2,6],[4,3]],[[1,6]],[[4,2]],[[1,3],[3,2]]]} {edges:[[[1,7]],[[0,7],[2,6],[4,3]],[[1,6],[3,14]],[[2,14],[4,2]],[[1,3],[3,2]]]} {edges:[[[1,7]],[[0,7],[2,6],[3,20],[4,3]],[[1,6],[3,14]],[[1,20],[2,14],[4,2]], [[1,3],[3,2]]]} {edges:[[[1,7],[2,5]],[[0,7],[2,6],[3,20],[4,3]],[[0,5],[1,6],[3,14]],[[1,20], [2,14],[4,2]],[[1,3],[3,2]]]} {edges:[[[1,1]],[[0,1]],[[3,1]],[[2,1]]]} {edges:[[[1,1]],[[0,1]],[[3,3]],[[2,3]],[[5,5]],[[4,5]]]} {edges:[[[1,3]],[[0,3],[3,12]],[[4,10],[5,20]],[[1,12]],[[2,10],[5,15]],[[2,20], [4,15]]]} {edges:[[[1,3],[2,5]],[[0,3],[2,12],[3,20],[4,3]],[[0,5],[1,12],[3,14],[6,10]], [[1,20],[2,14],[4,2]],[[1,3],[3,2],[5,11]],[[4,11],[6,2]],[[2,10],[5,2],[7,100]], [[6,100]]]}
hints:
A good place to start is to transform the adjacency list into a list of
all of the edges, sorted by weight. To check if adding a given edge creates a cycle, try using a disjoint set. Start by thinking of each node as its own set. Then with each added edge, combine the sets of the connected nodes.