0% 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.

Uploaded by

Shivam Kumar
Copyright
© © All Rights Reserved
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% 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.

Uploaded by

Shivam Kumar
Copyright
© © All Rights Reserved
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.

source: coursedl.org

You might also like