This course is a sequel to CSci 235 Software Design and Analysis II. Its principal objective is to expand on topics in the design and analysis of algorithms and data structures. This includes the introduction of hashes, heaps, various forms of trees, and graphs. It also revisits recursion and the sorting problem from a higher perspective than was presented in the prequels. On top of this, it is intended to introduce methods of algorithmic analysis.
Another objective of the course is to give the students the chance to develop their software development skills a little more, and to give them practical experience for more productive programming. I have probably taught this class more times in the last decade than any other class that I teach. I enjoy teaching it, and a have a personal view about how it should be taught. I think it is important to have a balance of theory and practice in the class. I try to share my experiences as a software developer with my students, and I try to show the relationship between some of the theoretical ideas and the practical matter of programming. I may not always succeed, of course, but that is my mission.