Computer Science 231: The Design and Analysis of Algorithms

Fall 1998

Instructor

Craig Miller
256 South College, x-1400
Email: millercr
Office hours to be announced and placed on Web page

Meetings

TuTh 9:30-11
Room 4 (basement) South College

Text

Foundations of Algorithms, by Neapolitan and Naimipour
Suggested text: UNIX in a Nutshell, O'Reilly & Associates

Course Links

Overview

This course introduces the study of algorithms at a formal level, including approaches for designing algorithms, theoretical methods for analyzing performance, and empirical methods for testing performance. In the process of studying algorithms, students learn or review data structures (e.g. matrices, hash tables, and trees) and problem solving approaches (e.g. divide and conquer, dynamic programming, the greedy approach, and backtracking).

Goals

Certainly a primary goal of the course is to achieve a solid competency in designing, analyzing and implementing algorithms, but the course also targets some general skills that are useful in almost any area of computing:

Grade Determination

While the grade is primarily determined from test and quiz scores, they will frequently cover material explicitly encountered in assignments done outside of class. Thus, much of the effort and learning in the course will go in the completion and study of these assignments.

The two quizzes will be scheduled approximately one to two weeks before each of the two tests. Part of their purpose is to provide some initial feedback to both the students and the instructor on how the class is going. They may also cover elementary concepts found in an ongoing assignment.

15% Test 1 Tue Oct 13
15% Test 2 Tue Nov 17
25% Final Exam Mon Dec 14
35% 6-7 Assignments Assigned 2 weeks in advance
10% 2 Quizzes Announced a week in advance

Policies

Tests and quizzes can only be made up with a written medical excuse and must be arranged as soon as possible.

Assignments turned in after the due date but before the next class meeting will be accepted with a 10% penalty. Assignments completed after the next class meeting will generally not be accepted for credit.

Unless explicitly told otherwise, all assignments in this course are individual assignments. Students may not work together in the design or implementation of code or written assignments. The only exceptions to this are:

  1. Students are encouraged to discuss course concepts and examples that are not specific to any assignment.
  2. Students may assist each other in locating and diagnosing bugs in programs.

All other assistance should come from the instructor. Any questions about the appropriateness of collaboration should be discussed with the instructor. Failure to acknowledge someone else's code or even design ideas in any work is plagiarism, which warrants a report to the College's judicial system and may lead to suspension or expulsion.

Tentative Schedule

Week Topic Text Reading
Sept 2 Course Overview Section 1.1
Sept 7 Images, Matrices and Algorithm Fundamentals Çourse notes and Section 1.2
Sept 14 Definitions and Notations of Efficiency Sections 1.3, 1.4 and Appendix A
Sept 21 Hashing Class Notes and Section 8.4
Sept 28 Divide and Conquer Approach Ch. 2 and Appendix B
Oct 5 Problems using Divide and Conquer Ch. 2
Oct 12 Dynamic Programming Ch. 3
Oct 19 Problems using Dynamic Programming Ch. 3
Oct 26 Greedy Algorithms Ch. 4.1
Nov 2 Shortest path and scheduling problems Sections 4.2 and 4.3
Nov 9 Backtracking Ch. 5
Nov 16 Comparisons in theory and practice Sections 4.4 and 5.7
Nov 23 Intro to Computational Complexity Ch. 7
Nov 30 Complexity of Sorting Problems Ch. 7,8
Dec 7 Intro to Theory of NP Ch. 9