If you ever come across a resource not on these lists that you find useful, please let me know so I can make this page more useful for others as well. Thanks!
Textbooks
There are several algorithms textbooks freely available online. It is well worth researching a given topic in multiple sources, because each can provide a perspective or explanation that adds something the others do not. These are roughly ordered by decreasing quality and ease of use.
- Algorithms by Dasgupta, Papdimitriou, and Vazirani. This follows an organization similar to that in Levitin's book.
- Algorithms by Sedgewick and Wayne. While the website only contains excerpts from the textbook, these provide very clear, concise overviews of all of the important concepts.
- Algorithms Course Materials from Jeff Erickson. This is a set of lectures notes that essentially has the size and depth of a textbook. Contains a large number of example homework assignments and exams, as well as links to many other resources.
- Foundations of Computer Science (C edition) by Aho and Ullman. I used this textbook the last time I taught the course. All code examples are in C.
- And if that's not enough, StackOverflow has a huge list of freely available programming books — the top answer has compiled a comprehensive list, including links to yet more lists.
The information is out there. We live in an age where access to information isn't the problem, but the ability to sift through and find the most valuable bits is increasingly important.
Specific Topics / Tools
These sites are great resources for specific topics or provide a useful tool for learning about algorithms.
- EquationExplorer is a simple but powerful tool for graphing various functions. For example, this provides a quick comparison of four of the most common functions in algorithm complexity analysis.
- Sorting Algorithm Animations is an excellent site that provides both clear animations of common sorting algorithms along with concise informational pages on each (e.g., heap sort).
- Data Structure Visualizations has animations and visualizations illustrating how a wide variety of data structures and algorithms work.
General References
These are some more general references for looking up concepts. You are familiar with some already, but I've tried to describe exactly how each can be useful.
- Academic Earth is a quality site that aggregates videos of lectures from top universities. Perform a search, and instantly start learning about a topic from brilliant people and great teachers (often both at the same time!).
- Wikipedia, of course. While it can be a troublesome source in some fields, I've found it to be quite good for theoretical computer science. It will give you a description of pretty much any concept we cover in this class, and if it's not clear enough, there will often be links to other sources as well. Everything you might need can be found starting from Algorithm, of course, and the list of algorithm general topics could be a good starting point for browsing as well.
- The C2 Wiki is another good source of algorithm information, even though its focus is more on software development. Its pages might come up in general web searches for you, but it could be useful to perform a targeted search such as this.
- Youtube and many other video sites contain algorithm visualizations, explanations, and even full lectures (perhaps not found on Academic Earth, above). (The second link goes to Yahoo video search, which looks like one of the most useful for this sort of material out of the many video search sites.)
With these resources, a motivated student can learn all of the material in this class on his or her own. I, however, can provide one-on-one interaction tailored to your particular understanding. Use these materials to learn broadly, and come to me for help with specific questions. The less time I spend replicating broad resources like these, the more time I can spend helping individuals.
C++
For learning and working with C++, cplusplus.com is a good resource.
- The C++ Reference contains documentation for all of the functions in the standard C++ library, organized by which library/header they are in. Use this to look up individual functions.
- The C++ Tutorial walks you through most aspects of programming in C++, and is a great place to look for help with a particular task, such as I/O or memory allocation.
Java
As with C++ above, for Java we have both a reference and a set of tutorials. (These references are for Java 6, while our lab machines have Java 5 installed, but there should be no important differences in the parts that concern us in this class.)
- Java (v6) API Specification (and a shortcut, if you know the class/package name you need) — The mother of all references for the standard Java API (packages that will be available in any JDK installation). If you don't remember how strings work, look here. If you're certain that there must be some function for reading a file in that particular way you need, you can find it here. If you're curious about what's available in a package, poke around in here.
- The Java Tutorials — Several tutorials covering fundamentals of Java. The Learning the Java Language and Essential Classes tutorials might be the most relevant to you in this class.
- Introduction to Programming in Java — The website for an introductory CS textbook; it contains some clear explanations of many important programming topics, in Java, and there is a great deal of sample code, as well.
Unix and the Command Line
We will be working in a Unix environment in this class. These resources can be used to refresh your memory or quickly look up a command. There are many "flavors" of Unix. OS X is one; Linux (like on sun.iwu.edu) is another. They all share common commands and utilities, though, so a tutorial written for one is often applicable to the others.