Graph Terminology Vertices Edges Directed Undirected Weighted in DSA Python - Time & Space Complexity
Graphs are made of points and connections. We want to understand how the time to work with these grows as the graph gets bigger.
How does the number of points and connections affect the work needed?
Analyze the time complexity of the following code snippet.
# Simple graph representation using adjacency list
graph = {
'A': [('B', 3), ('C', 5)], # edges with weights
'B': [('C', 2)],
'C': [('A', 4)]
}
# Print all edges
for vertex in graph:
for neighbor, weight in graph[vertex]:
print(f"{vertex} -> {neighbor} with weight {weight}")
This code prints all connections (edges) from each point (vertex) in a weighted directed graph.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Nested loops over vertices and their edges.
- How many times: Outer loop runs once per vertex (V times), inner loop runs once per edge from that vertex (sum of edges E).
As the graph grows, the work grows with the number of vertices and edges.
| Input Size (V, E) | Approx. Operations |
|---|---|
| V=10, E=15 | ~25 (10 + 15) |
| V=100, E=200 | ~300 (100 + 200) |
| V=1000, E=5000 | ~6000 (1000 + 5000) |
Pattern observation: The work grows roughly with the sum of vertices and edges.
Time Complexity: O(V + E)
This means the time to process the graph grows linearly with the number of points plus the number of connections.
[X] Wrong: "The time depends only on the number of vertices or only on the number of edges."
[OK] Correct: Both vertices and edges matter because you visit each vertex and all its edges to process the graph fully.
Understanding how graph size affects work helps you explain and write efficient graph algorithms confidently in interviews.
"What if the graph was undirected instead of directed? How would the time complexity change?"
Practice
Solution
Step 1: Understand graph components
A graph consists of points called vertices and connections called edges.Step 2: Identify the term for points
The points or nodes where edges meet are called vertices.Final Answer:
Vertices -> Option AQuick Check:
Points in graph = Vertices [OK]
- Confusing edges with vertices
- Thinking weights are points
- Mixing paths with vertices
Solution
Step 1: Understand tuple representation
A weighted edge is often represented as a tuple (start_vertex, end_vertex, weight).Step 2: Match the correct tuple format
The tuple (A, B, 5) correctly shows an edge from A to B with weight 5.Final Answer:
(A, B, 5) -> Option DQuick Check:
Weighted edge tuple = (start, end, weight) [OK]
- Using list instead of tuple
- Putting weight first
- Using dictionary instead of tuple
graph = { 'A': ['B', 'C'], 'B': ['C'], 'C': ['A'] }
print(len(graph['A']))Solution
Step 1: Analyze the graph dictionary
Key 'A' has a list of neighbors ['B', 'C'], so graph['A'] is ['B', 'C'].Step 2: Calculate length of neighbors list
len(graph['A']) counts the number of neighbors, which is 2.Final Answer:
2 -> Option AQuick Check:
Neighbors of A = 2 [OK]
- Counting total keys instead of neighbors
- Confusing keys with values
- Off-by-one counting errors
graph = { 'A': ['B'], 'B': ['C'], 'C': [] }
graph['C'].append('A')Solution
Step 1: Understand undirected graph representation
In an undirected graph, edges go both ways, so adjacency lists must be symmetric.Step 2: Check the adjacency lists
Initially, 'A' connects to 'B', but 'B' does not connect back to 'A', so it's directed.Final Answer:
The graph is directed, not undirected -> Option CQuick Check:
Undirected graph needs two-way edges [OK]
- Assuming one-way edges are undirected
- Ignoring symmetry in adjacency lists
- Confusing cycles with direction
graph = {
'A': [('B', 3), ('C', 5)],
'B': [('A', 3), ('C', 1)],
'C': [('A', 5), ('B', 1)]
}What is the total weight of all edges in this graph?
Solution
Step 1: List all edges with weights
Edges: A-B(3), A-C(5), B-C(1). Each edge appears twice because graph is undirected.Step 2: Sum weights and divide by 2
Total sum counting duplicates = 3+5+3+1+5+1 = 18. Divide by 2 to avoid double counting: 18 / 2 = 9.Final Answer:
9 -> Option BQuick Check:
Sum weights once for undirected edges [OK]
- Counting edges twice
- Forgetting to divide by 2
- Ignoring weights in tuples
Ready to prove it?
Pass the test and this pattern moves unknown
