- PREREQUISITE: An undergrad course in discrete mathematics. One year's experience in some high-level computer language and familiarity with recursive programming and basic data structures (arrays, pointers, stacks, queues, linked lists, binary trees).
- This course emphasizes analysis, correctness and efficiency of algorithms. As such, it is relatively mathematical and rigorous. Students are expected to work hard on this.
- An important aspect of analysis is on solving recurrences. You will learn asymptotic notations (Big-Oh, etc).
- Basic algorithms to know include balanced binary trees, sorting and selection, hashing, graph traversal, graph connectivity, breadth-first and depth-first searches, spanning tree, shortest paths.
- Computational techniques include divide-and-conquer, greedy method, and dynamic programming.
- Depending on time, we add some advanced topics such as: randomized algorithms, amortization, primality and cryptographic applications, and computational geometry.
- The capstone of the course is a brief introduction to NP-Completeness Theory.