CSCI 311 - Algorithms and Data Structures

Course Description

In this course, you will study algorithms and data structures.   You will learn techniques to analyze algorithms and determine time and space complexity of programs.   You will also cover some algorithms for solving combinatorial problems.   Major topics include time and space complexity, abstract data types, linear data structures, sets, trees and graphs, searching, and sorting.

This course involves programming assignments as well as problem sets.    Please think carefully about program design and apply good software engineering practices.   Written design specs may be required for programming projects.

Course Learning Outcomes
Course Objectives

CSCI 311 will focus on the following objectives:

Gaining factual knowledge (terminology, classifications, methods, trends). In particular, in this course you will learn definitions for asymptotic analysis of functions, methods for formulating and solving recurrence relations, classifications of algorithms and data structures in terms of abstract data types (ADTs), and the details of various algorithms.

Learning fundamental principles, generalizations, or theories. The course will cover the motivation for using asymptotic analysis on algorithm performance. It will also cover general algorithmic techniques such as dynamic programming.

Learning to apply course material (to improve thinking, problem solving, and decisions). In this course you will learn to solve simple recurrence relations, and you will implement algorithms covered in class. We will also discuss where asymptotic analysis can be applied, and where other considerations will outweigh it in choosing the best algorithm.

Sections
There are three lecture sections: There are also three recitation sections: Recitations are not associated with particular lecture sections; students from any lecture section may be enrolled in any recitation.

Textbook
Introduction to Algorithms, Third Edition, Cormen, Leiserson, Rivest, and Stein, 2009. MIT Press. ISBN 978-0-262-03384-8 (hardcover), ISBN 978-0-262-53305-8 (paperback).

Reading
Complete the reading assignments by the date indicated in the lecture schedule.   Be prepared to discuss and raise questions about the material.
Attendance
Attendance at all lectures and recitations is expected. While attendance won't always be taken, instructors appreciate knowing why students are absent. Please let your lecture or recitation instructor know in advance of planned absences. Note that regularly missing class is one of the potential special circumstances that could lead to a discretionary reduction in grade (see section on Grades below).
Homework and Programs

You will enjoy (and benefit from) this class more thoroughly if you successfully complete all the assignments. Some of these assignments will be problem sets and some will ask you to write programs. There will be roughly 8 assignments and you will almost always have at least one week to complete them. The instructors will specify deadlines and submission methods for each section. Please be neat when writing solutions to problem sets and, with programming assignments, make sure to document your code well (that is, write comments where appropriate).

All assigned work is due on the date and at the time specified. Each student will be given 3 late days to use during the semester (a weekend counts as one day). When you hand in something late, indicate how many late days you are using and how many you think you have left. Once your late days are exhausted, any further late assignments will be accepted only at the discretion of the instructor, and with a penalty to be negotiated. For example, very late assignments have sometimes been accepted in past years at a substantial (e.g., 50%) penalty.

Under certain circumstances, assignments may be accepted late without penalty. For example, written medical excuses from a doctor may be grounds for granting an extension. Also, it is sometimes possible to make prior arrangements for late submissions due to anticipated absences; be sure to talk to the instructor well before the anticipated absence!

If a grade needs to be adjusted, please see your instructor as soon as possible after the return of the assignment.

Cooperative Work

You are expected to work individually on most assigned programs and problem sets, though discussion of high-level design issues (e.g., how the data structures and algorithms discussed in class work and general ideas about how they can be applied and implemented) is allowed.   Design of the code itself and the actual coding should be done individually. If you are allowed to work in teams for certain assignments, the rules for individuals will apply to teams in that case.

Pseudocode for algorithms used in the programming assignments will usually be presented in lecture and/or in the course text. You are strongly encouraged to follow this pseudocode in writing your code because you should have a clear idea of how it works from class. There are numerous ways to implement most of these algorithms, however, and we have observed that students often go to other sources when writing their programs. If you do go to another source for information about how to implement an algorithm, be sure to reference that source in a comment in your code. That includes page numbers for books and URLs for web references.

As is typical in programming, you may at some point require assistance in finding errors in your program. After you have made a good-faith effort to solve such a problem, ask a friend for help or see your instructor. "Help" in this context means assistance in determining what is wrong. You are responsible for fixing the problem.

If cooperation is allowed on a problem set, the instructions will specify this, and will explain what level of cooperation is allowed. Typically you will be allowed to discuss issues with other teams or individuals. When the time comes to write down the solutions, however, each team or individual must produce its own document. Please observe Bucknell's Academic Responsibility guidelines and always consult your instructor when in doubt.

Warning: Code from some programming projects and problems from assignments will likely show up in exam questions. When working as a team, make sure that both members are involved in all parts of the assignment rather than splitting up the work and each doing half!

Exams

There will be two one-hour exams and a comprehensive final. The one-hour exams will be Wednesday 2 October and Monday 4 November. The comprehensive final examination will be given at the time scheduled by the Registrar. Missing exams because of illness will require an excuse from a doctor. Make-up exams for excuses other than illness will be given only in extraordinary circumstances and only at the discretion of the instructor. If you expect that you will need a make-up exam, contact your lecture instructor at least one week in advance. If a grade needs to be adjusted, please see your instructor as soon as possible after the return of the exam.

Grades
The course grade will be distributed as follows:
Homework/Programs:   30%
Exam 1:   20%
Exam 2:   20%
Final Exam:   30%

Grades may be adjusted upwards or downwards at the discretion of the instructor in special circumstances. For example, an extremely bad failing grade on the final exam could be the basis for a reduction of the final grade, as could excessive absences from class.

Suggestions and Requests
You are encouraged to provide feedback, either positive or negative, on the course. Constructive criticism (that is, remarks that can help us improve this experience) is always welcome.

Bucknell University - Department of Computer Science

This page is maintained by Steve Guattery