CodeSage / data /docs /heaps.txt
Aditya
Major upgrade: auto-metrics, Plotly charts, Qwen2.5, PDF support, expanded KB
a52cc98
Raw
History Blame Contribute Delete
2.04 kB
Heaps and Priority Queues
A heap is a complete binary tree that satisfies the heap property:
- Min-Heap: every parent node is smaller than or equal to its children. Root is the minimum.
- Max-Heap: every parent node is greater than or equal to its children. Root is the maximum.
Heap Properties:
- Complete binary tree: all levels fully filled except possibly the last, filled left to right.
- Stored efficiently as an array: for node at index i, left child = 2i+1, right child = 2i+2, parent = (i-1)//2.
Core Operations and Complexities:
- Insert (push): Add at end, bubble up (heapify up). O(log n)
- Get min/max: Return root. O(1)
- Remove min/max (pop): Replace root with last element, bubble down (heapify down). O(log n)
- Build heap from array (heapify): O(n) β€” better than inserting one by one O(n log n)
- Search: O(n) β€” heaps do not support efficient search
Priority Queue:
- Abstract data type where each element has a priority
- Element with highest (or lowest) priority is dequeued first
- Implemented with a heap
- Python: use `heapq` module (min-heap by default)
- heapq.heappush(heap, item)
- heapq.heappop(heap) β€” removes and returns smallest
- heapq.heapify(list) β€” converts list to heap in O(n)
- For max-heap in Python: negate values (push -val, pop and negate result)
Common Use Cases:
- Dijkstra's shortest path algorithm
- Prim's minimum spanning tree
- K largest / K smallest elements
- Merge K sorted lists
- Task scheduling / job queues
- Median maintenance (two heaps: max-heap for lower half, min-heap for upper half)
Heap Sort:
1. Build a max-heap from the array: O(n)
2. Repeatedly extract max and place at end: O(n log n)
3. Total: O(n log n) time, O(1) space (in-place)
- Not stable (doesn't preserve relative order of equal elements)
Example β€” K largest elements using min-heap of size K:
- Maintain a min-heap of the K largest seen so far
- For each element, push it; if heap size > K, pop the smallest
- Final heap contains K largest elements
- Time: O(n log k), Space: O(k)