This book is about problem-solving. In particular it is about heuristic state-space search for combinatorial optimization - one of the fundamental problems of computer science. Its two central themes are the average-case complexity of state-space search algorithms and the applications of the results notably to branch-and-bound techniques. These include best-first search, depth-first branch-and- bound, iterative deepening, recursive best-first search, and constant- space best-first search. Primarily written for researchers in computer science, the author presupposes a basic familiarity with complexity theory. In addition, it is assumed that the reader is familiar with the basic concepts of random variables and recursive functions. Two succesful applications are presented in depth: one is a set of state-space transformation methods which can be used to find approximate solutions qwuickly, and the second is a method called forward estimation for constructing more informative evaluation functions.