Compras Nikon Bluetooth |
It is quite clear from the reviews though, that the
reviewers have not **used** it for teaching; they may
have browsed it at most.
The first disappointments came very soon in the course I
taught. The biggest flaw of the book is the really bad style
in which the proofs are written. They manage to be seemingly
overflowing with explanation, and at the same time difficult
to understand. They gloss over many details: if the teacher
tries to skip these, an alert student could easily make
him/her look pretty silly.
One case in point is the proof of the label correcting
algorithm's correctness starting on page 136. I knew this
material from before, so I thought preparing class from
here would be a breeze. I was wrong: after going back to
my notes, and breaking up the mess into several simple
claims did I manage to make notes from which I could teach.
Whoever missed the class was helpless, when they looked
for explanation in the book.
I only remark, that all classes that I taught from this book
were at some of the top 10 OR depts at the US... so this is
hardly the students' fault.
Many exercises are wrong as well, and although the authors
claim that they will try to fix the mistakes, they hardly ever
reply to reader's comments, as some of my fellow professors
told me.
I can only compare the style of the exposition to the
later written Combinatorial Optimization book by
Cunningham et. al. There is a WORLD of difference.
One can try to look up for instance, the proof
for the label correcting algorithm: the proof in the
Ahuja et. al book is practically creaking at the joints,
while in Cunningham et. al. it flows lucidly.
I suspect that the authors of the latter book wrote it, since
they were unhappy with this one; one can hardly be surprised.
On the positive side, the plethora of applications presented
is truly amazing, and the exercises (when correct) are excellent.
To sum it up: A good book, which could have become a great one,
but have not; one which is very useful, but at the
same time very hard to use... I think the community would thank
the authors for a second, revised edition, that would fix
all the mistakes, and all those terrible proofs.
A final word: this text received the prestigious Lanchester
prize. One may surmise that giving prizes to a textbook
would be best done maybe after 5 years, after a book proved
its worth in actual teaching in the trenches,
so to speak, and NOT based on the first impression that the
jury gets.
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.
A must buy for any serious student taking a course in Network Programming.
The Commandments of the EE:
(9) Trifle thee not with radioactive tubes and substances lest thou
commence to glow in the dark like a lightning bug, and thy wife be
frustrated and have not further use for thee except for thy wages.
(10) Commit thou to memory all the words of the prophets which are
written down in thy Bible which is the National Electrical Code,
and giveth out with the straight dope and consoleth thee when
thou hast suffered a ream job by the chief electrician.
(11) When thou muckest about with a device in an unthinking and/or
unknowing manner, thou shalt keep one hand in thy pocket. Better
that thou shouldest keep both hands in thy pockets than
experimentally determine the electrical potential of an
innocent-seeming device.
Ninety percent of everything is crap.
-- Theodore Sturgeon