CSCI 256(S) Algorithm Design and Analysis (Q)
This course is concerned with investigating methods of designing efficient and reliable algorithms. By carefully analyzing the underlying structure of the problem to be solved it is often possible to dramatically decrease the computational resources needed to find a solution. Through such analysis one can also verify that an algorithm will perform correctly, as well as accurately estimate its running time and space requirements. We will present several algorithm design strategies that build on data structures and programming techniques introduced in Computer Science 136, including induction, divide-and-conquer, dynamic programming, and greedy algorithms. Particular topics to be considered will include algorithms in graph theory, computational geometry, string processing, and advanced data structures. In addition, an introduction to complexity theory and the complexity classes P and NP will be provided. Format: lecture. Evaluation will be based on problem sets and programming assignments, and midterm and final examinations. Prerequisites: Computer Science 136 and Discrete Mathematics. Enrollment limit: 40 (expected: 25).