CS 227 BIBLIOGRAPHY

A. V. Aho, J. E. Hopcroft, and J. D. Ullman.  The Design and Analysis of
Computer Algorithms.  Addison-Wesley, 1974.  "This was the standard graduate
text on algorithms and data structures for many years.  It is written quite
tersely, with some sentences requiring an additional paragraph of explanation.
 If you want the plain facts with no singing or dancing, this is
the book for you.  It is a little dated in presentation and material, but
not particularly so."

A. V. Aho, J. E. Hopcroft, and J. D. Ullman.  Data Structures and
Algorithms. Addison-Wesley, 1983.  "This is the undergraduate version of the
previous book, with more emphasis on programming.  It is full of minor
errors.  A large number of the Pascal program fragments don't work, even
when you correctly implement their C-like  return  statement"

A. V. Aho and J. D. Ullman.  Foundations of Computer Science. Computer
Science Press, 1992.  "This textbook is redefining the undergraduate
computer science curriculum at many leading institutions.  It is a good
place to go to brush up on your discrete mathematics, data structures, and
problem solving skills."

S. Baase and Van Gelder. Computer Algorithms:  Introduction to Design and Analysis.
Addison-Wesley, 3rd ed. 2000..  "A good algorithms text at the upper-division
undergraduate level." The '78 edition was more lecture notes than a
developed text. The '88 edition is much improved. It was used as the text
in Winter '97. The '00 edition seems even better.

J. Bentley.  Programming Pearls.  Addison-Wesley, 1986 and
 More Programming Pearls:  Confessions of a Coder.  Addison Wesley,
1988.  "This delightful pair of books are a collection of Jon Bentley's
Programming Pearls column from Communications of the ACM.  They should be
recommended reading for all undergraduate computer science majors.  Bentley
explores the problems and pitfalls of algorithm design and analysis, and
pays careful attention to implementation and experimentation.  The subjects
chosen are too idiosyncratic and anecdotal to be a textbook, but
nonetheless a useful pair of books."

G. Brassard and P. Bratley.  Algorithmics:  Theory and Practice.  Prentice
Hall, 1988.  "This is another good algorithms text with a strong emphasis on
design techniques.  The title comes from the French word *algorithmique*,
which is what they (perhaps more aptly) call Computer Science." Good section
on recurrence relations. Good examples related to encryption. Tough sledding
at times. Unusual approach to complexity.

T. H. Cormen, C. E. Leiserson, and R. L. Rivest.  Introduction to
Algorithms.  M.I.T. Press, 1990.  "This is another good algorithms text for
those who can handle it.  In the spirit of Aho, Hopcroft, and Ullman, it
does not mess around.  A massive tome, it contains enough material for both
a graduate and undergraduate course in algorithms.  It is the definitive
text for those who want to get right down to business, but it is not for
the faint of heart.  A great reference. Plenty of material - but still needs to
be supplemented at times. Used in 1995, 1998, and 2004 (2nd ed.) at Carleton."

Deo, Nievergelt and Reingold, Combinatorial Algorithms, QA664.R43. Good
balance between analysis and applications. Useful reference.

S. Even.  Graph Algorithms.  Pitman, 1979.  "This is the canonical book on
graph algorithms covering most of the graph algorithm material taught in
the typical algorithms course, plus more.  It is a little dated, but still
very useful."

M. R. Garey and D. S. Johnson.  Computers and Intractability:  A Guide to
the Theory of NP-Completeness.  W. H. Freeman, 1979.  "This is the canonical
book on NP-Completeness.  It is particularly useful for its large list of
NP-Complete problems.  It is showing its age a little, but David Johnson
has expressed an intention to work on a Second Edition.  More modern
subjects are covered by David Johnson in "The NP-Completeness Column:  An
On-Going Guide," published on a semiregular basis in Journal of Algorithms."

A. M. Gibbons.  Algorithmic Graph Theory.  Cambridge University Press.  "A
more modern and carefully presented text on graph algorithms, superior in
many ways to Even."

R. L. Graham, D. E. Knuth, and O. Patashnik.  Concrete Mathematics:  A
Foundation for Computer Science.  Addison-Wesley, 1989.  "An excellent book
on discrete mathematics for computer science.  However, many students find
it quite difficult going.  It is noted for its marginal (and often obscure)
graffiti."

D. H. Green and D. E. Knuth.  Mathematics for the Analysis of Algorithms.
Birkhauser, j1982.  "A highly mathematical text for an advanced course on
algorithm analysis at Stanford.  Recommended for the serious graduate
student."

D. Harel.  Algorithmics:  The Spirit of Computing.  Addison-Wesley, 1987.
"This is another possible text along the lines of Brasssard and Brately.  It
contains excellent high-level descriptions of subjects that tend to confuse
the beginning student if they are presented in all their detailed glory.
It is noted for its biblical quotes.  More of an intertesting series of essays
for the knowlegeable reader than a text or referece. No problems."

E. Horowitz, S. Sahni and B. Rajasekaran.  Computer Algorithms,  C++.Computer
Freeman, 1996.  "This is a reasonable text for many of the topics
found in the typical algorithms class." Organized by class of algorithms.
Used in the past at Carleton. Goes well with its companion data structures
text. Recent editions show improvements.

J. H. Kingston.  Algorithms and Data Structures:  Design, Correctness,
Analysis.  Addison-Wesley, 1990.  "A strong textbook for the elementary
undergraduate algorithms course, but the coverage is a little shallow for
advanced undergraduates.  The chapter on correctness proofs is an unusual
but welcome addition. Divide-and-conquer and dynamic programming are
covered very sketchily, and the approach to greedy algorithms is
idiosyncratic but likely to strike a chord with some students.' "

D. E. Knuth. The Art of Computer Programming.  Addison-Wesley. 
  Fundamental Algorithms, volume 1, 1973.
  Seminumerical Algorithms, volume 2, second edition, 1981.
  Sorting and Searching, volume 3, 1973.
        
        "The Knuth three-volume series is the standard reference text for
researchers and students.  The material in it has aged well, except for
Knuth's penchant for an obscure fictitious assembly-level code instead of
a more popular and easy to understand pseudocode. A classic!"

D. C. Kozen.  The Design and Analysis of Algorithms.  "A text for graduate
students containing 40 lectures on algorithms.  The terse presentation is
not for everybody.  It contains enough material for a single graduate
course, as opposed to the normal text that allows the instructor to pick
and choose the material to be covered.  The choice of material is strong
but not to everybody's taste.  The homework problems (all of which have
solutions) and miscellaneous exercises (some of which have solutions) are
particularly useful."

Lewis and Denenberg.  Data Structures and Their Algorithms.  Harper
Collins, 1991.  "A strong data structures text that also covers some of the
material in the typical algorithms course. Many with similar titles don't"

U. Manber.  Introduction to Algorithms :  A Creative Approach.
Addison-Wesley, 1989.  "Some students find the approach taken in the book,
which is algorithm design by successive refinement of intuitive but flawed
versions of the algorithm, very helpful.  Others, who do not think this
way, hate it.  It is certainly more realistic in its approach to algorithm
design than more formal texts, but perhaps it encourages the wrong habits.
Some important topics are not covered in very great detail. Used twice
as a text at Carleton with mixed reviews. Probably o.k. lecture notes if
you wanted to follow closely it's creative, problem-solving approach to
algorithms; but hard to deviate from."

B. M. E. Moret and H. D. Shapiro.  Design and Efficiency, volume 1 of
Algorithms from P to NP.  Benjamin/Cummings, 1991.  "This is planned as the
first volume of a two-volume set.  This volume covers tractable problems,
and the second volume (unsighted as yet) will cover intractable problems.
It has a definite combinatorial optimization flavor.  Dynamic programming
is a notable omission from the first volume."

R. Neapolitan and K. Naimipour. Foundations of Algorithms. Heath. 1999.
2nd ed includes C++ pseudo-code. The text for 227 in 2000- 2003. Seems to 
be a good balance between practical hints and rigorous analysis.

J. Nievergelt and K. H. Hinrichs. Prentice-Hall. 1993 Algorithms & Data 
Structures. With applications to graphics and geometry. Wide ranging but 
ofter quite clever.

C. H. Papadimitriou and K. Steiglitz.  Combinatorial Optimization:
Algorithms and Complexity.  Prentice Hall, 1982.  "A reasonable text for an
algorithms course, but one which is very heavy with the jargon and mind-set
of the combinatorial optimization and numerical analysis community, which
makes it a difficult book to just dip into at random for the parts of it
that are useful."

Ian Parberry. Problems on Algorithms. Prentice-Hall, 1995. Good source of
problems for exams or review on recurrences, several classes of algorithms
and complexity. The source of much the quoted material in this bibliography.

P. W. Purdom, Jr. and C. A. Brown.  The Analysis of Algorithms.  Holt,
Rinehart, and Winston, 1985.  "A mathematically rigorous text that focuses
on analysis almost to the exclusion of design principles." Strong mathematically.
Short on complete analyses. Applications imbedded. Good reference.

G. J. Rawlins.  Compared to What?:  An Introduction to the Analysis of
Algorithms.  Computer Science Press, 1992.  "An entertaining text that
nonetheless is technically rigorous and detailed."

R. Sedgewick.  Algorithms.  Addison-Wesley, 1983.  "This book studies a
large array of standard algorithms, but it is largely descriptive in nature
and does not spend much time on verification, analysis, or design
techniques.  It is excellent for the elementary undergraduate algorithms
curriculum, but not sufficiently rigorous for upper-class courses." Comes
in a variety of programming languages. A good place to look for an initial,
but not final, explanation.

S. S. Shiena. The Algorithm Design Manual. Springer. 1997. A useful reference.
Arranged by application. Gives advice and references to algorithms.

J. D. Smith.  Design and Analysis of Algorithms.  PWS-Kent, 1989.  This is
another strong algorithms text with an awesome collection of problems.

D. Solow.  How to Read and Do Proofs.  Wiley, second edition, 1990.  "This
is a good text for the student who has trouble with mathematical formalism.
The chapter on induction may be particularly useful for those who have
trouble getting started."

M. A. Weiss.  Data Structures and Algorithm Analysis.  Benjamin/Cummings,
1992.  "A strong data structures text that also covers quite a bit of the
material in the typical algorithms course." (Many with simial titles don't.)

H. S. Wilf.  Algorithms and Complexity.  Prentice Hall, 1986.  "A book that
does a good job on analysis, but does not cover algorithm design
techniques.  The selection of topics is limited to chapter and mathematical
preliminaries, recursion, network flow, number-theoretic algorithms, and
NP-completeness." Plus a rather old-fashioned mode for expressing algorithms.

Periodicals:

Communications of the ACM
   Had an algorithms section until about 25 years ago.

Transactions on Mathematical Software
   Now contains the algorithms.

Collected Algorthms of the ACM.
  Collections of the above with periodic updates.