This course defines and introduces the concepts and techniques needed to formulate and model optimization problems. A set of fundamental problems in combinatorial optimization will be covered together with their applications. The emphasis will be on the design and analysis of algorithms for such problems. The computational complexity of this set of problems (easy/hard to solve/approximate) will be discussed, and techniques for coping with intractable problems will be introduced. PREREQUISITE(S): CSC 421.