Emphasis will be placed on fundamental algorithms and advanced methods of algorithmic design, analysis, and implementation. Techniques to be covered include network flows, linear programming, Integer linear programming, NP-completeness, solving NP-complete problems using approximate and heuristic approaches, and dynamic programming.