Resources
All kinds of resources useful for the course, from physical books to virtual websites. If you find something good out there, please tell us about it so we can add it here.
Books
While there are lots of useful books for this course, the most important one is the following required text on algorithms and data structures. We will be using Java exclusively, so getting the Java version is highly recommended.
-
Michael T. Goodrich,
Roberto Tamassia:
Data Structures and Algorithms in Java,
4th edition, John Wiley & Sons, 2005.
[Buy]
- Michael T. Goodrich, Roberto Tamassia: Data Structures and Algorithms in Java, 3rd edition, John Wiley & Sons, 2003. [Buy]
- Michael T. Goodrich, Roberto Tamassia, David M. Mount: Data Structures and Algorithms in C++, John Wiley & Sons, 2004. [Buy]
The following books are not required but make for good reading anyway. The first is a recent classic, and a reference that can serve you throughout your career (or at least in 600.363/463 :-). It uses pseudo-code throughout and takes quite a different approach overall; it is also much, much longer.
-
Thomas H. Cormen,
Charles E. Leiserson,
Ronald L. Rivest,
Clifford Stein:
Introduction to Algorithms,
2nd edition, MIT Press, 2001.
[Buy]
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: Introduction to Algorithms, MIT Press, 1990. [Buy]
Comparatively few people seem to know about the following book, but I like it quite a bit. It also uses pseudo-code instead of any particular language, but it is relatively concise.
- Harry R. Lewis, Larry Denenberg: Data Structures and Their Algorithms, Harper Collins, 1991. [Buy]
Speaking of concise, the following book is the most concise text on advanced data structures that I know of; it is also a joy to read, although not necessarily the first time you try.
- Robert E. Tarjan: Data Structures and Network Algorithms, SIAM, 1983. [Buy]
Since we will be using Java exclusively in the course, and since the required text only introduces the bare minimum, it might be a good idea to have some Java text handy as well. Here are a few options, the first one probably being the most useful.
-
David Flanagan:
Java in a Nutshell,
O'Reilly, 5th edition, 2005.
[Buy]
- David Flanagan: Java in a Nutshell, O'Reilly, 4th edition, 2002. [Buy]
The following is a popular Java text as well, and it's available for free. In don't like big books very much, but at least this one has a decent reputation. :-)
- Bruce Eckel: Thinking in Java, Prentice Hall, 3rd edition, 2003. [Buy]
The official language specification for Java is a good resource to have around, but you can easily access it online, no need to shell out money. The official tutorial is slightly out-of-date, but if you have a lot of catching up to do, you won't really care.
- James Gosling, Bill Joy, Guy L. Steele Jr., Gilad Bracha: The Java Language Specification, Addison-Wesley, 3rd edition, 2005. [Buy]
- Mary Campione, Kathy Walrath, Alison Huml: The Java Tutorial, Addison-Wesley, 3rd edition, 2000. [Buy]
If you already know Java but need a concise reference to carry around without building up more muscle (i.e. something that actually fits into the proverbial nutshell) check this one out:
-
Peter Sestoft:
Java Precisely,
MIT Press, 2nd edition, 2005.
[Buy]
- Peter Sestoft: Java Precisely, MIT Press, 2002. [Buy]
If you are looking for a concise summary of good Java programming style, the following short booklet comes in handy.
- Al Vermeulen et.al.: The Elements of Java Style, Cambridge University Press, 2000. [Buy]
Finally three more general books on programming and software development, all highly recommended (not just for this course); the last one can be particularly useful if you're interested in design issues, and I will sometimes take examples from it.
- Andrew Hunt, David Thomas: The Pragmatic Programmer, Addison-Wesley, 1999. [Buy]
- Brian W. Kernighan, Rob Pike: The Practice of Programming, Addison-Wesley, 1999. [Buy]
- Barbara Liskov, John Guttag: The Practice of Programming, Addison-Wesley, 2000. [Buy]
This list is hardly exhaustive. Feel free to email me suggestions if you find a good book on any of the topics we deal with in the course. :-)
Previous Offerings
- Peter Fröhlich: 600.226: Data Structures, Spring 2006.
- Peter Fröhlich: 600.226: Data Structures, Fall 2005.
- Jason Eisner: 600.226: Data Structures, Spring 2004.
- Subodh Kumar: 600.226: Data Structures, Spring 2002.
- Jonathan Cohen: 600.226: Data Structures, Fall 2002.
- Jan Hajic: 600.226: Data Structures, Spring 2000.
Standards
Programming Style
When it comes to issues of programming style, it's more important to develop some consistent style than to develop any particular style; this is different in team projects of course, here everyone should agree on a common style. In terms of grading, the safest thing is to pick a style advocated by some "authoritative" entity (without "mixing and matching" of course); here are some possible style guides.
- Code Conventions for the Java Programming Language (unbeatable, in terms of authority that is)
- AmbySoft Inc. Coding Standards for Java (the runner-up, but trumped by their later book)
- Geosoft's Java Programming Style Guidelines (pretty well accepted, not as much though)
- Paul Haahr: A Programming Style for Java (great, but even less widely known)
- Ed Gellenbeck: Java Programming Style Guide (nice summary, but not complete enough)
If you are thinking "Safety first!" pick either the first or the second. The fourth has lots of nice reasoning in it, useful if you are ever asked to define a style for a team.
Animations
- The Complete Collection of Algorithm Animations
- Sorting Algorithms Demo
- Beautiful Balanced Tree Applet