Principles of design of efficient algorithms: recursion, divide and conquer, balancing, dynamic programming, greedy method, data structure selection. Correctness and analysis of algorithms. Examples drawn from problems in sorting, searching, set manipulation, pattern matching, graphs, matrices, polynomials, and integers.
None