algorithms Dynamic Programming diffing spacing Graph and Shortest Path data structure: adjacency list and edge list Dijkstra's shortest path Boyer-Moore & Bloom filter