Bird
Raised Fist0
DSA C#programming~5 mins

Minimum Spanning Tree Prim's Algorithm in DSA C# - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Minimum Spanning Tree Prim's Algorithm
O(n²)
Understanding Time Complexity

We want to understand how the time needed to find a minimum spanning tree using Prim's algorithm grows as the graph gets bigger.

Specifically, how does the number of steps change when the graph has more points and connections?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


// Prim's algorithm to find MST
int vertices = graph.Length;
bool[] inMST = new bool[vertices];
int[] key = new int[vertices];
for (int i = 0; i < vertices; i++) key[i] = int.MaxValue;
key[0] = 0;

for (int count = 0; count < vertices - 1; count++) {
    int u = MinKey(key, inMST);
    inMST[u] = true;
    for (int v = 0; v < vertices; v++) {
        if (graph[u][v] != 0 && !inMST[v] && graph[u][v] < key[v]) {
            key[v] = graph[u][v];
        }
    }
}

This code finds the minimum spanning tree of a graph using Prim's algorithm with a simple array to pick the next vertex.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: The outer loop runs once for each vertex, and inside it, the inner loop checks all vertices to update keys.
  • How many times: The outer loop runs n times, and the inner loop runs n times for each outer loop, making the key updates happen about n x n = n² times.
How Execution Grows With Input

As the number of vertices grows, the steps needed grow roughly with the square of the number of vertices.

Input Size (n)Approx. Operations
10About 100 key updates
100About 10,000 key updates
1000About 1,000,000 key updates

Pattern observation: Doubling the number of vertices roughly quadruples the work because of the nested loops.

Final Time Complexity

Time Complexity: O(n²)

This means the time to find the minimum spanning tree grows roughly with the square of the number of vertices in the graph.

Common Mistake

[X] Wrong: "Prim's algorithm always runs in linear time because it just picks the smallest edge each time."

[OK] Correct: Picking the smallest edge requires checking many edges, and with this simple approach, it takes more time as the graph grows, not just a fixed amount.

Interview Connect

Understanding how Prim's algorithm scales helps you explain your choices clearly and shows you know how to handle graphs efficiently in real problems.

Self-Check

"What if we used a priority queue (min-heap) to pick the next vertex instead of scanning all vertices? How would the time complexity change?"

Practice

(1/5)
1. What is the main goal of Prim's Algorithm in graph theory?
easy
A. To find the minimum spanning tree of a connected weighted graph
B. To find the shortest path between two nodes
C. To detect cycles in a graph
D. To sort the vertices of a graph

Solution

  1. Step 1: Understand Prim's Algorithm purpose

    Prim's Algorithm is designed to find a tree that connects all vertices with the smallest total edge weight.
  2. Step 2: Compare with other graph tasks

    Shortest path, cycle detection, and sorting vertices are different problems solved by other algorithms.
  3. Final Answer:

    To find the minimum spanning tree of a connected weighted graph -> Option A
  4. Quick Check:

    Prim's Algorithm = Minimum Spanning Tree [OK]
Hint: Prim's always builds a tree with minimum total edge weight [OK]
Common Mistakes:
  • Confusing Prim's with shortest path algorithms
  • Thinking it detects cycles
  • Assuming it sorts graph nodes
2. Which of the following C# code snippets correctly initializes a priority queue for Prim's Algorithm using .NET 6+ syntax?
easy
A. var pq = new Queue<int>();
B. var pq = new Stack<int>();
C. var pq = new SortedList();
D. var pq = new PriorityQueue();

Solution

  1. Step 1: Identify correct data structure for Prim's

    Prim's Algorithm requires a priority queue to pick the minimum weight edge efficiently.
  2. Step 2: Match with C# syntax

    PriorityQueue<TElement, TPriority> is the correct .NET 6+ class for priority queues.
  3. Final Answer:

    var pq = new PriorityQueue<int, int>(); -> Option D
  4. Quick Check:

    PriorityQueue<int,int> = Correct initialization [OK]
Hint: Use PriorityQueue<TElement, TPriority> in .NET 6+ [OK]
Common Mistakes:
  • Using Queue instead of PriorityQueue
  • Using Stack which is LIFO, not priority-based
  • Using SortedList which is not a priority queue
3. Consider the following C# code snippet implementing Prim's Algorithm on a graph with 4 nodes and edges with weights:
int[,] graph = {
  {0, 2, 0, 6},
  {2, 0, 3, 8},
  {0, 3, 0, 0},
  {6, 8, 0, 0}
};

var mst = PrimMST(graph);
Console.WriteLine(string.Join(", ", mst));

// PrimMST returns the parent array representing MST
What is the output printed by this code?
medium
A. [ -1, 0, 1, 0 ]
B. [ 0, 2, 1, 3 ]
C. [ -1, 2, 0, 1 ]
D. [ 0, -1, 1, 2 ]

Solution

  1. Step 1: Run Prim's Algorithm on given graph

    Start from node 0: parent[0] = -1. Choose edges with minimum weights connecting new nodes: 0-1 (2), 1-2 (3), 0-3 (6).
  2. Step 2: Construct parent array

    Node 0 has no parent (-1). Node 1's parent is 0. Node 2's parent is 1. Node 3's parent is 0.
  3. Final Answer:

    [ -1, 0, 1, 0 ] -> Option A
  4. Quick Check:

    Parent array = [-1,0,1,0] [OK]
Hint: Trace edges picked by minimum weight stepwise [OK]
Common Mistakes:
  • Mixing up parent indices
  • Starting from wrong node
  • Ignoring zero weights as no edge
4. The following C# code snippet for Prim's Algorithm has a bug. What is the error?
int V = 5;
int[] key = new int[V];
bool[] mstSet = new bool[V];

for (int i = 0; i < V; i++) {
    key[i] = int.MaxValue;
    mstSet[i] = false;
}

key[0] = 0;
int parent[] = new int[V];

for (int count = 0; count < V - 1; count++) {
    int u = MinKey(key, mstSet);
    mstSet[u] = true;

    for (int v = 0; v < V; v++) {
        if (graph[u, v] != 0 && mstSet[v] == false && graph[u, v] < key[v]) {
            parent[v] = u;
            key[v] = graph[u, v];
        }
    }
}
What is the bug?
medium
A. The loop should run from 0 to V instead of V - 1
B. The key array is not initialized with int.MaxValue
C. The parent array is not initialized before use
D. The mstSet array is not updated correctly

Solution

  1. Step 1: Check parent array initialization

    The parent array is declared but not initialized with any default values, so it contains garbage values initially.
  2. Step 2: Importance of initializing parent array

    Without initialization, parent[v] may hold invalid data before assignment, causing incorrect MST representation.
  3. Final Answer:

    The parent array is not initialized before use -> Option C
  4. Quick Check:

    Parent array must be initialized [OK]
Hint: Always initialize parent array before MST loop [OK]
Common Mistakes:
  • Ignoring uninitialized parent array
  • Thinking key or mstSet are incorrect
  • Changing loop bounds unnecessarily
5. You have a weighted graph with 6 nodes and edges:

(0-1: 4), (0-2: 3), (1-2: 1), (1-3: 2), (2-3: 4), (3-4: 2), (4-5: 6)
Using Prim's Algorithm starting from node 0, which edges will be included in the minimum spanning tree?
hard
A. (0-1), (1-3), (3-4), (4-5), (2-3)
B. (0-2), (1-2), (1-3), (3-4), (4-5)
C. (0-2), (1-2), (3-4), (4-5), (0-1)
D. (0-1), (1-2), (1-3), (3-4), (4-5)

Solution

  1. Step 1: Start from node 0 and pick minimum edges stepwise

    From 0, edges are (0-1:4) and (0-2:3). Pick (0-2) with weight 3.
  2. Step 2: Add next minimum edges connecting new nodes

    From nodes {0,2}, edges are (1-2:1), (0-1:4), (2-3:4). Pick (1-2) with weight 1.
  3. Step 3: Continue adding minimum edges

    From {0,1,2}, edges are (1-3:2), (2-3:4), (0-1:4). Pick (1-3) with weight 2.
  4. Step 4: Add edges to connect remaining nodes

    From {0,1,2,3}, edges are (3-4:2), (4-5:6). Pick (3-4) with weight 2, then (4-5) with weight 6.
  5. Final Answer:

    (0-2), (1-2), (1-3), (3-4), (4-5) -> Option B
  6. Quick Check:

    Edges chosen minimize total weight [OK]
Hint: Always pick smallest edge connecting new node [OK]
Common Mistakes:
  • Picking edges with higher weights first
  • Not updating the set of connected nodes
  • Including edges that form cycles
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard