Minimal examples of data structures and algorithms in Python
Minimal, clean, and well-documented implementations of data structures and algorithms in Python 3.
Each file is self-contained with docstrings, type hints, and complexity notes — designed to be read and learned from.
pip install algorithms
from algorithms.sorting import merge_sort
print(merge_sort([38, 27, 43, 3, 9, 82, 10]))
# [3, 9, 10, 27, 38, 43, 82]
from algorithms.data_structures import BinaryHeap, Trie, BST
from algorithms.graph import dijkstra, bellman_ford
from algorithms.tree import TreeNode
Graph — Dijkstra's shortest path:
from algorithms.graph import dijkstra
graph = {
"s": {"a": 2, "b": 1},
"a": {"s": 3, "b": 4, "c": 8},
"b": {"s": 4, "a": 2, "d": 2},
"c": {"a": 2, "d": 7, "t": 4},
"d": {"b": 1, "c": 11, "t": 5},
"t": {"c": 3, "d": 5},
}
print(dijkstra(graph, "s", "t"))
# (8, ['s', 'b', 'd', 't'])
Dynamic programming — coin change:
from algorithms.dynamic_programming import count
# Number of ways to make amount 10 using denominations [2, 5, 3, 6]
print(count([2, 5, 3, 6], 10))
# 5
Backtracking — generate permutations:
from algorithms.backtracking import permute
print(permute([1, 2, 3]))
# [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
Data structures — binary heap:
from algorithms.data_structures import BinaryHeap
heap = BinaryHeap()
for val in [5, 3, 8, 1, 9]:
heap.insert(val)
print(heap.remove_min()) # 1
print(heap.remove_min()) # 3
Searching — binary search:
from algorithms.searching import binary_search
print(binary_search([1, 3, 5, 7, 9, 11], 7))
# 3 (index of target)
Tree — inorder traversal:
from algorithms.tree import TreeNode
from algorithms.tree import inorder
root = TreeNode(4)
root.left = TreeNode(2)
root.right = TreeNode(6)
root.left.left = TreeNode(1)
root.left.right = TreeNode(3)
print(inorder(root))
# [1, 2, 3, 4, 6]
String — Knuth-Morris-Pratt pattern matching:
from algorithms.string import knuth_morris_pratt
print(knuth_morris_pratt("abxabcabcaby", "abcaby"))
# 6 (starting index of match)
python -m pytest tests/
…
All core data structures live in algorithms/data_structures/:
avl_tree.py
AvlTree
B-Tree
b_tree.py
BTree
Binary Search Tree
bst.py
BST
Fenwick Tree
fenwick_tree.py
Fenwick_Tree
Graph
graph.py
Node, DirectedEdge, DirectedGraph
Hash Table
hash_table.py
HashTable, ResizableHashTable
Heap
heap.py
BinaryHeap
KD Tree
kd_tree.py
KDTree
Linked List
linked_list.py
SinglyLinkedListNode, DoublyLinkedListNode
Priority Queue
priority_queue.py
PriorityQueue
Queue
queue.py
ArrayQueue, LinkedListQueue
Red-Black Tree
red_black_tree.py
RBTree
Segment Tree
segment_tree.py, iterative_segment_tree.py
SegmentTree
Separate Chaining Hash Table
separate_chaining_hash_table.py
SeparateChainingHashTable
Sqrt Decomposition
sqrt_decomposition.py
SqrtDecomposition
Stack
stack.py
ArrayStack, LinkedListStack
Trie
trie.py
Trie
Union-Find
union_find.py
Union
vEB Tree
veb_tree.py
VEBTree