CS231 - Data Structures and Algorithms
- Office: Mudd 416B
- Office Hours:
- Wednesday, 11:00AM - 12:00 Noon
- Thursday, 11:00PM - 12:00 Noon
- Drop by almost any time for short questions
- Make an appointment for longer discussions
- Email: rjones@colby.edu
- Phone: (872-)3831
- WWW: http://www.cs.colby.edu/~rjones/
Time
10:00 AM - 10:50 AM, Monday, Wednesday, and Friday
Location
Lovejoy 344
Some Friday meetings will be in Olin 323
Textbook
Goodrich, M. T., & Tamassia, R. (2001). Data structures and algorithms in
Java. Second Edition. New York: John Wiley.
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:
- Advanced competence for programming and problem solving, including
improvements in your skills for:
- Top-down and object-oriented design
- Development of modular and reusable algorithms
- Debugging and trouble-shooting techniques
- Creating well organized and understandable computer programs
- Understanding, designing, and implementing interfaces and abstract
data types
- A variety of new programming techniques and data structures
- The ability to analyze tradeoffs between various approaches
to programming and problem solving
- The general knowledge to choose intelligently between your new
tools when presented with a problem
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:
- Qualitative mathematical comparison of algorithms
- Data abstraction; reusable data structures; abstract data types and interfaces
- Static and dynamic data types
- Linear collections of data; arrays and linked representations
- Recursion
- Queues and stacks; priority queues
- Basic input and output using consoles and files
- Trees and graphs
- Tables
- Searching and sorting various data structures
Evaluation
The course will include a variety of homework assignments, quizzes, exams,
and projects.
Homework and small labs
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 Friday, October 10, and Wednesday, November 12.
There will also be a final exam during the scheduled final examination period
for this class.
Projects
There will be a handful (probably 5 or 6) of 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
as guidelines. I reserve the right to alter these proportions as
I deem appropriate, and to include subjective evaluations into your final
grades. But the final grades will be computed approximately along these
lines:
- 25%: Homework, labs, and quizzes
- 25%: Projects
- 30%: 15% each for two midterm exams
- 20%: Final exam
- Attendance and class participation will also be factored into your grade,
which may adjust your overall score up or down. So please be sure to attend
class, ask questions, participate in discussion, and talk to me outside of
class.
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.
Your grade for individual assignments will also sometimes include an "extra
effort" category of roughly 10% of the total points, where you can earn extra
points for particularly creative, industrious, or otherwise impressive
approaches to the assignment. You are not compelled to invest time in these
extra effort points, but you should keep in mind that I tend to use these
points to distinguish the A-minus students from the A students in the final
grading. Also keep in mind that you should complete the assignment's
instructions as written before trying to get creative, and that it is
often a good idea to clear your creative ideas with me before pursuing them.
I am jealous with A grades, and you are more likely to receive one if you have
used the extra effort points to demonstrate a mastery of the subject material.
Late assignments
It is very inconvenient for me to accept work past the deadline, because
it complicates my grading. Except in unusual situations,
late assignments will receive a penalty of
25% of the total points for each calendar day late (so you will
receive 0 for anything more than 3 days late).
Your daily duties
To prepare for each class, I expect you to do the following:
Show up
I expect you to attend 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. In addition, if you miss subjects
covered in class, it will use up extra amounts of your time and mine to make
sure you understand what was covered. 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).
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. Although you will mostly be
working on individual assignments (as opposed to group projects),
I want you generally to take
advantage of your instructors, teaching assistants, and fellow
students in working out solutions to assignments. I encourage you
to use outside sources, papers, fellow class members, and others to help
you complete your assignments, because this is similar to the situation you
will find yourself in out in "the real world". Taking advantage of other
people's help does not constitute cheating.
However, presenting the results of other people's efforts as your own
does constitute cheating. Thus, you must credit the
contributions of other sources in the presentation of your work. This is
similar to what you would do if you were writing a paper for and English or
History class. If you have
questions about how to use and cite references, please ask your instructor.
Additionally, although you can use assistance, the final work you turn in my
be substantially a product of your own, and not anybody else's.
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.
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)