Bird
Raised Fist0
DSA Pythonprogramming~5 mins

Adjacency Matrix Representation in DSA Python - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Adjacency Matrix Representation
O(n²)
Understanding Time Complexity

We want to understand how the time to check or update connections in a graph grows as the graph gets bigger.

How does the number of nodes affect the work needed with an adjacency matrix?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


# Create adjacency matrix for n nodes
n = 4
adj_matrix = [[0] * n for _ in range(n)]

# Add edge between node 1 and 3
adj_matrix[1][3] = 1

# Check if edge exists between node 0 and 2
exists = adj_matrix[0][2] == 1

This code creates a matrix to store connections, adds one connection, and checks if another connection exists.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Creating the matrix uses a loop to fill rows and columns.
  • How many times: The matrix creation loops run n times for rows and n times for columns, so n × n = n² times.
How Execution Grows With Input

When the number of nodes doubles, the matrix size grows by four times because it stores connections for every pair of nodes.

Input Size (n)Approx. Operations
10100 (10×10)
10010,000 (100×100)
10001,000,000 (1000×1000)

Pattern observation: The work grows with the square of the number of nodes.

Final Time Complexity

Time Complexity: O(n²)

This means the time to create or check the matrix grows quickly as the number of nodes increases, specifically by the square of the nodes.

Common Mistake

[X] Wrong: "Checking if an edge exists is slow because it needs to look through many connections."

[OK] Correct: Checking one connection in an adjacency matrix is actually very fast, just one direct lookup, which is O(1).

Interview Connect

Understanding adjacency matrix time complexity helps you explain trade-offs in graph storage and access, a common topic in interviews.

Self-Check

"What if we used an adjacency list instead of a matrix? How would the time complexity for checking edges change?"

Practice

(1/5)
1. What does an adjacency matrix represent in graph theory?
easy
A. A 2D array showing connections between nodes
B. A list of nodes in the graph
C. A sequence of edges in the graph
D. A tree structure of nodes

Solution

  1. Step 1: Understand adjacency matrix concept

    An adjacency matrix is a 2D array where rows and columns represent nodes.
  2. Step 2: Identify what the matrix stores

    Each cell shows if an edge exists between two nodes (1 for yes, 0 for no).
  3. Final Answer:

    A 2D array showing connections between nodes -> Option A
  4. Quick Check:

    Adjacency matrix = 2D array of connections [OK]
Hint: Adjacency matrix is always a 2D grid of node links [OK]
Common Mistakes:
  • Confusing adjacency matrix with adjacency list
  • Thinking it stores node values instead of connections
  • Assuming it is a list or sequence
2. Which of the following is the correct way to declare a 3x3 adjacency matrix in Python initialized with zeros?
easy
A. matrix = [0,0,0]
B. matrix = [[0]*3]*3
C. matrix = [0]*3
D. matrix = [[0 for _ in range(3)] for _ in range(3)]

Solution

  1. Step 1: Understand correct 2D list initialization

    Using list comprehension creates independent inner lists for each row.
  2. Step 2: Analyze each option

    matrix = [[0]*3]*3 creates shallow copies causing all rows to reference the same list, which is incorrect. matrix = [[0 for _ in range(3)] for _ in range(3)] correctly creates separate lists. Options C and D create 1D lists, not 2D.
  3. Final Answer:

    matrix = [[0 for _ in range(3)] for _ in range(3)] -> Option D
  4. Quick Check:

    Use list comprehension for independent rows [OK]
Hint: Use nested list comprehension for 2D matrix [OK]
Common Mistakes:
  • Using [[0]*3]*3 causes all rows to be same object
  • Creating 1D list instead of 2D
  • Forgetting to nest loops for rows and columns
3. What will be the output of the following code?
graph = [[0,1,0],[1,0,1],[0,1,0]]
for i in range(3):
    for j in range(3):
        if graph[i][j] == 1:
            print(f"Edge between {i} and {j}")
medium
A. Edge between 0 and 0 Edge between 1 and 1 Edge between 2 and 2
B. Edge between 0 and 1 Edge between 1 and 0 Edge between 1 and 2 Edge between 2 and 1
C. Edge between 0 and 1 Edge between 1 and 2
D. No output

Solution

  1. Step 1: Analyze the adjacency matrix

    Matrix shows edges: (0,1), (1,0), (1,2), (2,1) as 1s.
  2. Step 2: Trace nested loops and print statements

    Loops check each cell; when value is 1, print edge between i and j.
  3. Final Answer:

    Edge between 0 and 1 Edge between 1 and 0 Edge between 1 and 2 Edge between 2 and 1 -> Option B
  4. Quick Check:

    Print edges where matrix cell is 1 [OK]
Hint: Print edges where matrix value is 1 [OK]
Common Mistakes:
  • Ignoring symmetric edges in undirected graph
  • Printing only one direction of edges
  • Confusing indices i and j
4. Find the error in the following code that tries to create an adjacency matrix for 4 nodes:
n = 4
matrix = [[0]*n]*n
matrix[0][1] = 1
print(matrix)
medium
A. The matrix initialization causes all rows to be the same list
B. The print statement syntax is incorrect
C. The index 1 is out of range for the matrix
D. The matrix should be initialized with ones, not zeros

Solution

  1. Step 1: Understand matrix initialization

    Using [[0]*n]*n creates shallow copies; all rows point to the same list.
  2. Step 2: Effect of modifying one element

    Changing matrix[0][1] changes that column in all rows because they share the same list.
  3. Final Answer:

    The matrix initialization causes all rows to be the same list -> Option A
  4. Quick Check:

    Use nested list comprehension to avoid shared rows [OK]
Hint: Avoid [[0]*n]*n; use nested list comprehension [OK]
Common Mistakes:
  • Assuming rows are independent lists
  • Ignoring shared reference problem
  • Thinking print syntax is wrong
5. Given a directed graph with 3 nodes and edges: 0->1, 1->2, and 2->0, which adjacency matrix correctly represents it?
hard
A. [[1,0,0],[0,1,0],[0,0,1]]
B. [[0,1,1],[1,0,1],[1,1,0]]
C. [[0,1,0],[0,0,1],[1,0,0]]
D. [[0,0,1],[1,0,0],[0,1,0]]

Solution

  1. Step 1: Map edges to matrix positions

    Edge 0->1 means matrix[0][1] = 1, 1->2 means matrix[1][2] = 1, 2->0 means matrix[2][0] = 1.
  2. Step 2: Check each option against edges

    [[0,1,0],[0,0,1],[1,0,0]] matches these exactly; others have extra or missing edges.
  3. Final Answer:

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

    Edges map to 1s in correct matrix cells [OK]
Hint: Set matrix[i][j] = 1 for edge i->j only [OK]
Common Mistakes:
  • Confusing directed and undirected edges
  • Setting symmetric edges for directed graph
  • Misplacing 1s in wrong matrix cells
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