Welcome!
Welcome to 15-211, Fundamental Data Structures and Algorithms. James Morris and Christopher Langmead will teach the course.
This course meets for two lectures and one recitation each week. The meeting times are as follows
- Lecture: Tuesdays and Thursdays, noon-1:20pm.
- Recitations are on Wednesdays.
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:
- The fundamental design, analysis, and implementation of basic data structures and algorithms.
- Principles for good program design, especially the uses of data abstraction and modular program composition.
- Basic concepts in the specification and analysis of programs.
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-121.
Some of the concepts and skills that will be taught in the course are as follows:
- 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.
- 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.
- Introduction to analysis of algorithms.
- The basic mathematical and logical principles underlying the analysis of the correctness and efficiency of data structures and algorithms.
- 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 recommended text for this course is Data Structures and Problem Solving Using Java, by Mark A. Weiss. You may use either the 3rd or 4th edition. You don't have to buy it, as is it is rather expensive.
We recommend Java Precisely as a reference for the Java language.
We also recommend The Java Programming Language, by Arnold, Gosling, and Holmes (Addison-Wesley, 2005). Another very helpful book is Effective Java by Joshua Bloch (Prentice Hall 2008). It presents a concise reference to many good design idioms for the Java Programming Language.
In addition to the textbooks, lecture notes will be available on this web site.
Communicating with us
There are many ways to communicate with us.
- The best way is to come to lecture and recitation and participate in discussions, ask questions, etc.
- Also good is to see an instructor or TA in office hours. Click on the Staff button to find out when the next conveniently scheduled office hours are available.
- Course staff will be constantly monitoring the discussion board, linked off the course home page.
- Most of the course staff is reachable by email. So, as a last resort you can try to send one of us email directly.
If you need help
By CMU standards this is a large course, about 170 students and a course staff of 9 people. It is likely that there will be times during the semester when you will need help 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.
- Clarifications on the homework: If the question does not give away any of the solution, you should post the question on the course discussion group, linked off the homepage. If you have the question, probably someone else in the class does too, so posting to the group will help everybody. The course staff reads the bulletin board regularly and will try to answer your question as soon as possible. It is also possible that a fellow student will have the answer and can respond. If the question requires giving away part of the solution, send one of the TAs email or see one of the course staff during office hours.
- You need help on the homework or class material: Talk with the member of the course staff in the cluster, send one of the TAs or instructors email, or see any of the TAs or instructors during their office hours. Please don't feel intimidated about going to office hours. We will try to schedule at least one office hour each day of the work-week. We are all here to help you.
- Questions about your grade on a homework: See (or send email to) the TA in charge of the assignment. Your recitation instructor will know which TA is in charge of which assignment.
- Questions about your grade on a quiz or test: See your recitation instructor. You can send email or come by during office hours.
- The course is taking too much of your time: This course is supposed to take, on average, 12 hours per week. If on average you are spending significantly more than this, we want to know. Please send one of the instructors an email message telling them. Sometimes it is hard for us to judge the difficulty of an assignment and your message lets us know when there is a problem.
- General academic questions: The course staff is happy to answer general academic
questions, such as
is it worth it for me to take 15-212?
You should catch one of us after class or recitation, or see us during office hours.