Question bank

How do you implement a function to calculate the minimum spanning tree of a graph using Kruskal's algorithm?

January 31, 20253 min read
HardTechnicalAlgorithm DesignProblem-SolvingData StructuresSoftware EngineerData Scientist
How do you implement a function to calculate the minimum spanning tree of a graph using Kruskal's algorithm?

Approach When asked about implementing a function to calculate the minimum spanning tree (MST) of a graph using Kruskal's algorithm during an interview, it is essential to structure your response clearly. Here’s a step-by-step framework to guide your thought…

Approach

When asked about implementing a function to calculate the minimum spanning tree (MST) of a graph using Kruskal's algorithm during an interview, it is essential to structure your response clearly. Here’s a step-by-step framework to guide your thought process:

  1. Understand the Problem: Explain what a minimum spanning tree is and why Kruskal's algorithm is suitable for this task.
  2. Outline the Algorithm: Describe the steps involved in Kruskal's algorithm.
  3. Discuss Data Structures: Identify the necessary data structures, such as disjoint-set (union-find).
  4. Code Implementation: Provide a sample code implementation in a relevant programming language.
  5. Test Cases: Mention how to test the function.
  6. Complexity Analysis: Discuss the time and space complexity of the algorithm.

Key Points

  • Definition of MST: A minimum spanning tree connects all vertices in a graph with the minimum possible total edge weight.
  • Kruskal's Algorithm Steps:
  • Sort all edges in non-decreasing order of their weight.
  • Pick the smallest edge and check if it forms a cycle with the spanning tree formed so far.
  • If not, include it in the tree.
  • Repeat until there are \( V-1 \) edges in the tree, where \( V \) is the number of vertices.
  • Disjoint-Set Structure: Essential for tracking and merging connected components efficiently.
  • Edge Cases: Consider disconnected graphs and how your implementation handles them.

Standard Response

Here’s a comprehensive sample answer you can adapt to your style:

To implement a function to calculate the minimum spanning tree of a graph using Kruskal's algorithm, we first need to understand the key concepts involved.

1. Understanding Minimum Spanning Tree: A minimum spanning tree (MST) of a weighted, undirected graph is a subgraph that connects all the vertices together with the least total edge weight, ensuring no cycles are formed. Kruskal's algorithm is a greedy approach that efficiently finds the MST by working with edges in order of their weights.

  • Sort all edges in ascending order based on their weight.
  • Initialize a disjoint-set (union-find) data structure to keep track of connected components.
  • Iterate through the sorted edges, and for each edge:
  • Use the union-find structure to check if the current edge forms a cycle.
  • If it does not form a cycle, add it to the MST.
  • Stop when we have added \( V-1 \) edges to the MST.
  • 2. Steps to Implement Kruskal’s Algorithm: The basic steps to implement Kruskal’s algorithm are:
  • A list to store edges as tuples (weight, vertex1, vertex2).
  • A disjoint-set data structure for efficient union and find operations.
  • 3. Data Structures: We need:

4. Sample Code Implementation: Here’s a Python implementation of Kruskal’s algorithm:

class DisjointSet:
 def __init__(self, n):
 self.parent = [i for i in range(n)]
 self.rank = [0] * n

 def find(self, u):
 if self.parent[u] != u:
 self.parent[u] = self.find(self.parent[u]) # Path compression
 return self.parent[u]

 def union(self, u, v):
 root_u = self.find(u)
 root_v = self.find(v)
 if root_u != root_v:
 if self.rank[root_u] > self.rank[root_v]:
 self.parent[root_v] = root_u
 elif self.rank[root_u] < self.rank[root_v]:
 self.parent[root_u] = root_v
 else:
 self.parent[root_v] = root_u
 self.rank[root_u] += 1

def kruskal(n, edges):
 # Sort edges based on weight
 edges.sort(key=lambda x: x[0])
 disjoint_set = DisjointSet(n)
 mst = []
 
 for weight, u, v in edges:
 if disjoint_set.find(u) != disjoint_set.find(v):
 disjoint_set.union(u, v)
 mst.append((weight, u, v))
 
 return mst

# Example usage
edges = [
 (1, 0, 1),
 (3, 0, 2),
 (2, 1, 2),
 (5, 1, 3),
 (4, 2, 3)
]
n = 4 # Number of vertices
mst_result = kruskal(n, edges)
print("Edges in the Minimum Spanning Tree:", mst_result)

5. Testing the Function: To validate the function

VA

Verve AI Editorial Team

Question Bank