Repository Guide | English | 한국어
Last Updated: 2026-10-27
| Unit | Topics | Documents |
|---|---|---|
| Week 1 Introduction to Algorithms | Definition and properties of algorithms, algorithms and data structures, Euclid's GCD algorithm, finding the maximum, binary search, coin change, Euler paths, maze solving, the fake coin and poisoned wine problems, installing and using coding agents, the Ralph technique, a sorting benchmark | Lecture notes, Lab notes |
| Week 2 Algorithm Design and Complexity Analysis | Properties and representation of algorithms, time complexity, best-, worst-, and average-case analysis, Big-O, Big-Omega, and Theta notation, the iteration, guess-and-verify, and master theorem methods for recurrences, timing measurements and complexity comparison of duplicate-finding solutions, a product search API comparison | Lecture notes, Lab notes |
| Week 3 Arrays, Stacks, Queues, and Basic Sorting Algorithms | Linked lists, stacks, queues, heaps, selection sort, bubble sort, insertion sort, merge sort, quick sort, heap sort, the lower bound for comparison sorting, radix sort and counting sort, implementation and benchmarking of sorting algorithms | Lecture notes, Lab notes |
| Week 4 Divide and Conquer Algorithms | The divide-and-conquer paradigm and the master theorem, merge sort, binary search, quick sort and the partition procedure, randomized selection and median of medians, the closest pair problem, when divide and conquer is inappropriate, finding the k-th smallest element and an autocomplete API | Lecture notes, Lab notes |
| Week 5 Greedy Algorithms | The greedy-choice property and optimal substructure, coin change, the fractional knapsack problem, job scheduling, activity selection, Huffman coding, Kruskal's and Prim's minimum spanning trees, Dijkstra's shortest paths, greedy algorithms versus dynamic programming, a meeting room reservation system | Lecture notes, Lab notes |
| Week 6 Dynamic Programming | Optimal substructure and overlapping subproblems, memoization and bottom-up DP, Fibonacci numbers, matrix paths, LCS, 0-1 knapsack, coin change, Floyd-Warshall, edit distance, a DP problem-solving strategy, LCS table visualization and a text diff viewer | Lecture notes, Lab notes |
| Week 9 Search Trees | Recursive definition of trees and traversal complexity, search, insertion, and deletion in binary search trees, red-black tree properties and double-red resolution (restructuring, recoloring), search, insertion, and deletion in B-trees, a comparison of the three search trees | Lecture notes |
| Week 10 Hash Tables and Set Data Structures | Hash functions and collisions, separate chaining and open addressing, linear probing and clustering, double hashing, load factor and rehashing, set and map data structures, hash tables versus BSTs | Lecture notes |
| Week 11 Graph Algorithms I | Graph types, adjacency matrix, adjacency list, and adjacency array representations, DFS and BFS, shortest hop-count paths with BFS, topological sorting by the in-degree and DFS-based methods, Prim's and Kruskal's minimum spanning trees | Lecture notes |
| Week 12 Graph Algorithms II | Optimal substructure of shortest paths and relaxation, Dijkstra's algorithm, the Bellman-Ford algorithm, the Floyd-Warshall algorithm, DAG shortest paths, strongly connected components and Kosaraju's algorithm | Lecture notes |
| Week 13 NP-Completeness and Approximation Algorithms | Complexity classes of problems, decision and optimization problems, the classes P and NP, polynomial-time reductions, NP-hard and NP-complete, NP-completeness proofs, handling NP-complete problems in practice and an overview of approximation algorithms | Lecture notes |
| Week 14 Approximation Algorithms | Approximation ratio and the indirect-optimal technique, the MST-based 2-approximation for TSP, the maximal-matching 2-approximation for vertex cover, four greedy heuristics for bin packing, a 2-approximation for job scheduling, the farthest-first 2-approximation for k-clustering | Lecture notes |