Week 1: January 21 - Course intro, algorithms, pseudocode

Week 2: January 24 - January 28: pseudocode, summations, big-O, asymptotic analysis, limits

Week 3: January 31 - February 4: big-O, Algorithm Correctness, Inductive Proofs, Brute Force Algorithms, Linear and Binary Search, Data Structures review (lists and trees)

Week 4: February 7 - February 11: Data Structures Review (arrays, linked lists, graphs, trees, BSTs, Stacks, Queues)

Week 5: February 14 - February 18: Finish data structure review (Priority Queues, Dictionaries, Hash Tables), Regular Expressions

Week 6: February 21 - February 25: Finish RegEx, Heaps, Heapsort, Recursion Review, Recurrence Relations

Week 7: February 28 - March 4: finish Recurrence Relations, Mergesort, Capstone Days

Week 8: March 7 - March 11: start thinking about projects, Partitions, Quicksort, Master Theorem, Divide and Conquer, BFS, DFS

Week 9: Spring Break

Week 10: March 21 - March 25: Greedy Algorithms, Minimum Spanning Trees, Prim’s, Kruskal’s, Dijkstra’s, Huffman Trees, Horspool’s Algorithm, Bipartite Matching, Combinatorial Search, Backtracking, Pruning, Branch and Bound

Week 11: March 28 - April 1: Bipartite Matching, Combinatorial Search, Backtracking, Pruning/Branch and Bound, Network Flow

Week 12: April 4 - April 8: DP

Week 13: April 11 - April 16: Finish DP (Floyd-Warshall, DP vs. Divide and Conquer), Context Free Grammars (CFGs), work on projects in case

Week 14: April 18 - April 22: PNP, HamCycle, 3-SAT, work on projects

Week 15: April 25 - April 29: finishing P/NP, Work on Projects

Week 16: May 2: Project presentations