Bird
Raised Fist0
DSA Pythonprogramming~5 mins

Adjacency List vs Matrix When to Choose Which in DSA Python - Key Differences

Choose your learning style10 modes available
Recall & Review
beginner
What is an adjacency list in graph representation?
An adjacency list stores each node and a list of its neighbors. It uses less space for sparse graphs and is efficient for traversing neighbors.
Click to reveal answer
beginner
What is an adjacency matrix in graph representation?
An adjacency matrix is a 2D array where each cell shows if an edge exists between two nodes. It uses more space but allows quick edge checks.
Click to reveal answer
intermediate
When is it better to use an adjacency list over an adjacency matrix?
Use an adjacency list when the graph is sparse (few edges) because it saves memory and is faster to iterate neighbors.
Click to reveal answer
intermediate
When should you choose an adjacency matrix instead of an adjacency list?
Choose an adjacency matrix for dense graphs (many edges) or when you need to quickly check if an edge exists between two nodes.
Click to reveal answer
beginner
What is a key disadvantage of using an adjacency matrix for large sparse graphs?
It wastes a lot of memory because it stores all possible edges, even if most don't exist, making it inefficient for sparse graphs.
Click to reveal answer
Which graph representation uses less memory for sparse graphs?
ABoth use the same memory
BAdjacency List
CAdjacency Matrix
DDepends on the number of nodes only
Which representation allows O(1) time to check if an edge exists between two nodes?
AAdjacency Matrix
BAdjacency List
CBoth have O(1) time
DNeither supports O(1) check
For a graph with 1000 nodes and 10,000 edges, which representation is generally better?
AUse a tree instead
BAdjacency Matrix
CEither is equally good
DAdjacency List
Which representation is easier to implement for weighted graphs?
ANeither supports weights
BAdjacency Matrix
CAdjacency List
DBoth are equally easy
What is a disadvantage of adjacency lists compared to adjacency matrices?
ASlower to check if an edge exists
BUses more memory
CCannot represent directed graphs
DCannot store weights
Explain when to choose adjacency list versus adjacency matrix for graph representation.
Think about graph density and memory use.
You got /4 concepts.
    Describe the main trade-offs between adjacency list and adjacency matrix.
    Consider time and space efficiency.
    You got /4 concepts.

      Practice

      (1/5)
      1. Which data structure is generally better for representing a graph with very few edges compared to the number of vertices?
      easy
      A. Adjacency List
      B. Adjacency Matrix
      C. Edge List
      D. Incidence Matrix

      Solution

      1. Step 1: Understand graph density

        A graph with very few edges compared to vertices is called a sparse graph.
      2. Step 2: Choose efficient representation for sparse graphs

        Adjacency lists store only existing edges, saving space for sparse graphs, unlike adjacency matrices which use space for all possible edges.
      3. Final Answer:

        Adjacency List -> Option A
      4. Quick Check:

        Sparse graph = Adjacency List [OK]
      Hint: Sparse graphs use adjacency lists for space efficiency [OK]
      Common Mistakes:
      • Choosing adjacency matrix for sparse graphs wastes space
      • Confusing edge list with adjacency matrix
      • Assuming adjacency matrix is always better
      2. Which of the following is the correct way to initialize an adjacency matrix for a graph with 4 vertices in Python?
      easy
      A. matrix = [[0 for _ in range(4)] for _ in range(4)]
      B. matrix = [[0]*4]*4
      C. matrix = [0]*4
      D. matrix = [[None]*4 for _ in range(4)]

      Solution

      1. Step 1: Understand matrix initialization

        Using list comprehension with nested loops creates independent inner lists.
      2. Step 2: Avoid shallow copies

        matrix = [[0]*4]*4 creates shallow copies causing all rows to reference the same list, leading to bugs.
      3. Final Answer:

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

        Independent rows = matrix = [[0 for _ in range(4)] for _ in range(4)] [OK]
      Hint: Use nested list comprehension for independent rows [OK]
      Common Mistakes:
      • Using [[0]*4]*4 causes all rows to be the same object
      • Initializing with single list for matrix
      • Using None instead of 0 for adjacency matrix
      3. Consider the following Python code for a graph with 3 vertices using adjacency list representation:
      graph = {0: [1, 2], 1: [2], 2: []}
      print(graph[1])

      What is the output?
      medium
      A. [1, 2]
      B. []
      C. [2]
      D. KeyError

      Solution

      1. Step 1: Understand adjacency list structure

        Key 1 maps to list [2], meaning vertex 1 connects to vertex 2.
      2. Step 2: Print value for key 1

        graph[1] returns [2], so print outputs [2].
      3. Final Answer:

        [2] -> Option C
      4. Quick Check:

        graph[1] = [2] [OK]
      Hint: Access adjacency list by vertex key [OK]
      Common Mistakes:
      • Confusing keys and values in dictionary
      • Expecting all vertices in output
      • Assuming KeyError for existing key
      4. The following code attempts to create an adjacency matrix for a graph with 3 vertices but has a bug:
      matrix = [[0]*3]*3
      matrix[0][1] = 1
      print(matrix)

      What is the output and what is the bug?
      medium
      A. IndexError; Wrong indexing
      B. [[0, 1, 0], [0, 0, 0], [0, 0, 0]]; No bug
      C. [[0, 0, 0], [0, 0, 0], [0, 0, 0]]; Assignment failed
      D. [[0, 1, 0], [0, 1, 0], [0, 1, 0]]; Rows are shallow copies

      Solution

      1. Step 1: Understand matrix initialization

        Using [[0]*3]*3 creates 3 references to the same inner list.
      2. Step 2: Modify one element affects all rows

        Setting matrix[0][1] = 1 changes the second element in all rows because they share the same list.
      3. Final Answer:

        [[0, 1, 0], [0, 1, 0], [0, 1, 0]]; Rows are shallow copies -> Option D
      4. Quick Check:

        Shallow copy rows cause all rows to change [OK]
      Hint: Avoid [[0]*n]*n; use nested list comprehension [OK]
      Common Mistakes:
      • Assuming only first row changes
      • Ignoring shallow copy behavior
      • Confusing IndexError with shallow copy bug
      5. You have a graph with 1000 vertices and about 10,000 edges. You need to frequently check if an edge exists between two vertices. Which representation is best and why?
      hard
      A. Edge List, because it is simplest to implement
      B. Adjacency Matrix, because it allows O(1) edge existence checks
      C. Adjacency List, because it uses less memory for sparse graphs
      D. Incidence Matrix, because it stores edges explicitly

      Solution

      1. Step 1: Analyze graph density and operations

        Graph has 1000 vertices and 10,000 edges, which is moderately sparse but not very sparse.
      2. Step 2: Consider operation speed for edge checks

        Adjacency matrix allows checking edge existence in constant time O(1), while adjacency list requires searching neighbors.
      3. Step 3: Balance memory and speed

        Though adjacency matrix uses more memory, the speed benefit for frequent edge checks outweighs memory cost here.
      4. Final Answer:

        Adjacency Matrix, because it allows O(1) edge existence checks -> Option B
      5. Quick Check:

        Frequent edge check = Adjacency Matrix [OK]
      Hint: For fast edge checks, adjacency matrix is best despite memory [OK]
      Common Mistakes:
      • Choosing adjacency list only for memory without considering speed
      • Ignoring operation frequency in choice
      • Confusing edge list with adjacency matrix for fast checks
      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