Welcome!

Welcome to 15-211, Fundamental Data Structures and Algorithms. Chris Langmead and Bill Scherlis will teach the course.

This course meets for two lectures and one recitation each week. The meeting times are as follows

In addition to the lecturers, a staff of teaching assistants will be handling recitation sessions, office hours, and many aspects of course instruction. Go to the staff section of the website to see when and where you can find course staff members, and check out the how to get help for information about how to make best use of the entire course staff.

Please be certain to check for course announcements by checking the announcements area on the home page or by subscribing to the RSS feed.

Goals

The goals for this course are to gain a solid understanding of the following topics:

Students will also develop the study habits and the general resourcefulness required to solve programming problems that are substantially more complex than those encountered in 15-111 or 15-200.

Some of the concepts and skills that will be taught in the course are as follows:

  1. Selection, design, and analysis of data structures and algorithms.
    • Methods for using mathematics to formulate a problem precisely.
    • Techniques for analyzing the suitability of various data structures for solving specific problems.
    • How to find or design an algorithm to solve a problem.
    • Techniques for proving the correctness of an algorithm and analyzing its memory and time requirements.
  2. Principles and techniques for the specification, design, verification, debugging, and testing of programs.
    • Methods for designing and writing code so that it can be more easily understood and maintained by others.
    • The concept of data abstraction and its importance in good program design.
    • Techniques for using modularity to separate cleanly the interface of a software component from its internal implementation.
  3. Introduction to analysis of algorithms.
    • The basic mathematical and logical principles underlying the analysis of the correctness and efficiency of data structures and algorithms.
  4. Programming in Java.
    • Advanced techniques including the use of recursion and references.
    • Elements of object-oriented programming, including the use of objects, classes, and methods.
    • I/O and the use of class libraries.
    • The use of Unit Testing

Textbook

The text for this course is Data Structures and Problem Solving Using Java, by Mark A. Weiss.

We also recommend The Java Programming Language, by Arnold, Gosling, and Holmes (Addison-Wesley, 2000). Another very helpful book is Effective Java by Joshua Bloch. It presents a concise reference to many good design idioms for the Java Programming Language.

In addition to the textbooks, handouts will be provided in class and will also be available on this web site.

Communicating with us

There are many ways to communicate with us.

If you need help

By CMU standards, this is a large course, about 150 students and a course staff of 10 people. It is likely that there will be times during the semester when you will need help in order to do well in the course. Because there are so many people, you might wonder who you should see about what. Here are some general guidelines.