This repository contains slides and implementations of the Algorithms Specialization offered by Stanford University on Coursera.
The primary topics in this part of the specialization are: asymptotic ("Big-oh") notation, sorting and searching, divide and conquer (master method, integer and matrix multiplication, closest pair), and randomized algorithms (QuickSort, contraction algorithm for min cuts). Application examples
2. Graph Search
The topics in this part on the specialization are: data structures (heaps, balanced search trees, hash tables, bloom filters), graph primitives (applications of breadth-first and depth-first search, connectivity, shortest paths), and their applications (ranging from deduplication to social network analysis). Application examples
- Breadth First Search (Layers and Shortest Path)
- Deep First Search
- Strongly Connected Components with Korasaju's algorithm
- Dijkstra's Shortest Path Algorithm
- Median Maintenance Using Heaps
- Two Sum Problem With Hashset
This part covers the several subjects: greedy algorithms (scheduling, minimum spanning trees, clustering, Huffman codes) and dynamic programming (knapsack, sequence alignment, optimal search trees). Application examples
- Schedule jobs using a greedy algorithm
- Prim's Minimum Spaninng Tree
- Greedy Clustering Algorithm
- Huffman Code
- Maximum Weighted Independent Sets with dynamic programming
- Knapsack problem with bottom-up dynamic programming approach
Finally the topics in this part are: shortest paths (Bellman-Ford, Floyd-Warshall, Johnson), NP-completeness and what it means for the algorithm designer, and strategies for coping with computationally intractable problems (analysis of heuristics, local search). Application examples