CS231 - Data Structures and Algorithms

Randolph M. Jones

Colby College, Spring Semester, 2001

Instructor: Randolph M. Jones

Time

11:00 AM - 11:50 AM, Monday, Wednesday, and Friday

Location

Olin 234
Some Friday meetings will be in Olin 323

Textbook

Standish, T. A. (1998). Data structures in Java. Reading, MA: Addision-Wesley.

Online course materials

http://www.cs.colby.edu/courses/cs231/
(includes lecture notes)

Course content

This is a "second course" in structured computer programming and problem solving. The course projects will be in the Java programming language, so you will learn some advanced features of that language. However, the general concepts in the course are more important than the specific programming language. By the end of this course, you should be a competent programmer who is comfortable with some of the advanced tools and methods that computer scientists and programmers use. My intent is for you to learn the following:

With these skills it should not only be possible for you to write advanced programs by yourself, it should also be a relatively superficial matter for you to learn new programming languages. Perhaps most importantly, you will have a new set of analytical skills for tearing apart and conquering sophisticated problems.

I hope to cover (at least) the following general topics during the course:

Evaluation

The course will include a variety of homework assignments, quizzes, exams, and projects.

Homework

This will be assigned occasionally, based on contents of the textbook and lectures. Some will be written responses to questions or problems. Others will be small programming projects.

Quizzes

Each quiz will take up only a portion of class time. You will have a quiz or exam every few weeks.

Exams

There will be two midterm exams, each taking an entire class period. The midterms will be on March 14 and April 18.

There will also be a final exam during the scheduled final examination period for this class.

Projects

There will be 4 or 5 larger programming projects, which will serve as the primary way for you to practice the techniques introduced in class, and to hone your problem solving and programming skills. You can expect to have from 1 to 3 weeks to complete each project.

Grading

I will compute final grades for the course using the following proportions:

Each score you receive will be normalized to a 100 point scale. These will not map directly to letter grades until everything is tallied at the end of the semester. However, as a rough guide, I generally consider 90 points or more to be ``A'' work, 80 points or more to be ``B'' work, 70 points or more to be ``C'' work, and 60 points or more to be ``D'' work. It is important to not, however, that such a scale is not guaranteed, especially across assignments. For example, a 95 on a midterm may not mean the same thing as a 95 on a project. However, I will try to keep the scales as uniform as is practical.

I also generally assume that if you do everything I ask on projects and assignments, that's worth about an A-minus or B-plus. To receive an exceptional grade, you need to do exceptional work, show particular enthusiasm, come up with especially industrious or innovative solutions, or otherwise impress me with your grasp of the material.

Your daily duties

To prepare for each class, I expect you to do the following:

Show up

I expect you to attend every class. As a class member, your regular attendance is an individual and a collective obligation. In-class discussion and questions are an essential feature of this course that only you can provide. Your absence can disrupt the continuity of the class, my effectiveness in presenting the ideas I want to cover, and the group's responsiveness to those ideas. Therefore, unexcused absences will adversely affect your course grade. Excessive absenteeism will result in your failing the course (and it doesn't take much to count as excessive). See your college handbook for a definition of excused absences. You are responsible for knowing all the information presented in class, whether or not you are there.

Be prepared

Before each class, you must review the material from the previous lecture. You should write down and bring to class any questions you have on the material, as well as questions on the current laboratory assignment. We will devote a portion of each class to answering those questions. Also, before each class, you should read (but not necessarily completely understand) the portion of the textbook pertaining to that day's material. In addition to helping you learn the course subject matter, this should help you develop general skills for reading and understanding written materials. Discussion should be an important part of each class, and you will not be able to participate effectively if you have not prepared. During discussions, I do not expect you always to have the "right answers", but I do expect you to have thoughtful contributions, and to try to give reasonable justifications for your answers.

Appropriate academic behavior

Students often have some confusion about what might or might not be considered "cheating" in a computer programming class. In general, I want you to take advantage of your instructors, teaching assistants, and fellow students in working out solutions to assignments. However, I also need to make sure that you are actually learning, and not simply using all of these resources as a crutch. As with writing a paper for an English class, there is a point at which working together becomes plagiarism. As a rule of thumb, if you find yourself turning in work that looks substantially like the work of someone else, you should seriously examine whether you have crossed the line. If you have any doubts, talk to your instructor before turning in the assignment.

In all cases, you must give credit to any source (like a written work or help from some individual) that you use to help complete an assignment. Again, this is similar to writing an English paper; if you use a quote or material from someone else, you have to give credit where credit is due. Otherwise you are inappropriately plagiarizing or borrowing ideas.

Be an active learner

This is the first of many times that I will ask you to come see your instructor any time you have questions. Whether you are aware of it or not, one of the reasons you came to Colby is because we have relatively small classes, and we have faculty who are willing to take the time to help you learn when you ask. It frustrates us when we miss opportunities to pull students out of confusion.

This is particularly important in this course. Many of the concepts we will cover build on each other. If you find yourself stuck trying to understand something, it will only make catching up later that much worse.

So take advantage of your instructor (and your fellow students and your teaching assistants). Ask questions in and out of class. I'll try to make the material as easy to digest as possible, but I'll need help identifying the things that are confusing you. But also note that you also won't know what you are confused about unless you keep up with the assigned work.


Randolph M. Jones (rjones@colby.edu)

This page is designed to be viewed with any browser