This book is a comprehensive overview of network flow algorithms with emphasis on cost constraint algorithms. In chapter 1 the authors introduce the network flow problems that will be studied in the book along with a discussion of the applications of these problems.
The terminology needed for network flow problems is introduced in Chapter 2, with rigorous definitions given for graphs, trees, and network representations. Most interesting is the discussion on network transformations, for here the authors discuss how to simplify networks to make their study more tractable.
An overview of complexity concepts in algorithms is given in the next chapter. A good discussion is given on parameter balancing. Pseudocode is given at various places to illustrate the algorithms.
Chapter 4 discusses shortest-path algorithms, with emphasis on label-setting algorithms. For network modelers and designers involved in routing algorithms, there is a nice discussion of Dijkstra's algorithm in this chapter, along with a treatment of how to improve on that algorithm by using Dial's, heap, and radix heap implementations.
A more general discussion of shortest path algorithms follows in Chapter 5, with details on label-correcting algorithms. The reader is asked to investigate the Bellman's equations in the exercises.
The maximum flow algorithm is treated in Chapter 6, and the reader with a background in linear programming will see ideas from that area applied nicely here. An application to parallel programming is given also. The maximum flow problem is treated using algorithms that improve worst-case complexity in Chapter 7, by employing the preflow-push algorithms. Even more approaches to the maximum flow problem are considered in Chapter 8, where the reader can find a good presentation of dynamic tree implementations.
All of the algorithms up to this point are put into the context of the minimum cost flow problem in Chapter 9. It is here that optimality conditions become very transparent in the implementation of the algorithms. A very quick but helpful discussion is given on sensitivity analysis of the minimum cost flow problem. An interesting application of the results is given to the problem of reconstructing the left ventricle in the heart from X-ray projections. Polynomial time algorithms for minimum cost flows are discussed effectively in Chapter 10, which is followed by a discussion of using linear programming methods in the minimum cost flow problem in Chapter 11.
The application of combinatorial optimization techniques is the subject of Chapter 12, where matching problems are discussed. The authors give a thorough treatment, along with many examples.
Spanning trees again make their appearance in Chapter 13, via the minimum spanning tree problem. The all-important Kruskal algorithm is given a detailed treatment, along with a very interesting discussion of matroids.
Nonlinear optimization via convex cost flows is the subject of Chapter 14, wherein the authors show how to transform a convex cost flow problem into a minimum cost flow problem.
Flow problems that are not conservative at the nodes are the subject of the next chapter on generalized flow problems. The solutions of these problems are discussed within the context of augmented forest structures, and many applications are given.
Lagrangian methods are the subject of Chapter 16, where the authors show how to solve constrained shortest path algorithms using Lagrangian relaxation. It is here that one can see the interplay between all of the techniques introduced so far. Particularly interesting is the discussion on applications to the traveling salesman problem, vehicle routing, and network design.
Flow problems where more than one entity are transferred across the network are the subject of Chapter 17, and logistic planners and engineers will find the treatment very helpful.
Most helpful to those using network flow algorithms in their everyday work is the discussion in Chapter 18 on the computational testing of algorithms. The authors give a fine discussion on how to identify bottlenecks, compare performance differences between two algorithms, and how to use virtual running times instead of CPU times to test algorithms.
The book ends with a chapter on more applications of network flow problems. Twenty-four applications are discussed, the most interesting ones to me being the optimal destruction of military targets, data scaling, DNA sequence alignment, automatic karyotyping of chromosomes, minimum project duration, just-in-time scheduling, warehouse layout, and inventory planning.