4. Hash Maps & Sets: O(1) Amortized Mechanics
Understand hash functions, key hashing, bucket indexing, and collision resolution.
The "WHY" Core Principle
Searching a list requires scanning item by item (O(N)). A Hash Map passes the key through `hash(key)`, takes `hash % bucket_count`, and jumps directly to that memory slot in O(1) time!
Interactive Visualizer
Interactive Big-O Complexity 2D Graph & Operation Profiler
Move the slider to observe operation growth curves smoothly scale as input size N increases.
Operations at N = 25
def get_first(arr):
return arr[0] # Direct memory offsetAnalogy: Jumping directly to a page number in an indexed book.
Operations at N = 25
while low <= high:
mid = (low + high) // 2 # Halve search spaceAnalogy: Finding a name in a phonebook by opening to the middle repeatedly.
Operations at N = 25
for item in arr:
if item == target: return True # Single sweepAnalogy: Reading every page in a book line by line from front to back.
Operations at N = 25
def merge_sort(arr):
# Divide array (log N) & merge halves (N)Analogy: Sorting a deck of cards by splitting into 2 piles recursively.
Operations at N = 25
for i in range(n):
for j in range(i + 1, n): # Compare every pairAnalogy: Comparing every card in a deck against every other card.
Operations at N = 25
def fib(n):
return fib(n-1) + fib(n-2) # 2 recursive calls per stepAnalogy: Trying every possible combination password lock.
Notice how O(1) and O(log N) remain near the bottom of the graph even as $N$ grows, while O(N²) and O(2ⁿ) curve steeply upward. This difference is why selecting the correct data structure prevents CPU bottlenecks!
Interactive Code Snippets (1 Lessons)
O(1) Hash Lookup vs O(N) List Lookup
Benchmark Python `dict` key lookup against `list` search with 50,000 items.
Dict lookup computes `hash(key) & mask` to immediately locate the bucket index. List lookup performs a linear scanning loop.
CPython C Struct Detail: Python dicts use a combined dense key table + sparse index table layout.
O(1) Hash Lookup vs O(N) List Lookup
Pyodide WASM EngineType, edit code, and click 'Run & Profile' to see live runtime ms and operation count!