This book treats the fundamental issues and algorithmic strategies emerging as the core of the discipline of discrete optimization. Following an introductory chapter on computational complexity, the basic algorithmic results for the two major models of polynomial algorithms are introduced - models using matroids and linear programming. Further chapters treat the major non-polynomial algorithms; branch-and-bound and cutting planes. The text concludes with a chapter on heuristic algorithms. Several appendixes are included which review the fundamental ideas of linear programming, graph theory, and combinatorics - prerequisites for readers of the text. Numerous exercises are included at the end of each chapter.