Algorithms (810:270), Fall 2002

Time and Place: 2:00-3:15 Tuesday and Thursday in Wright 5

Instructor: Mark Fienup (

Office: 321 Wright Hall

Phone: 273-5918

Office Hours: M 9-11, 2-3; T 3:30-4:30; W 9-11, 2-3; Th 3:30-4:30; F 9-11

Text: Foundations of Algorithms using C++ Pseudocode, Richard Neapolitan and Kumarss Naimipour, second edition 1997.

Prerequisites: You must have a working knowledge of some procedural type programming language (C, C++, Ada, Pascal, etc.) that supports recursion. Ideally, you should have successfully completed an undergraduate algorithms course (like UNI's 810:153), but I'll try to make this course fairly self-contained. This necessitates some overlap/review with an undergraduate course. However, the pace and depth of duplicated topics will be more demanding here. Much of this course contains mathematical notation which may cause you difficulty. If this occurs, see me ASAP to correct the problem.

Course Goals: After this course, you should be able to (1) design solutions to problems by using classical problem solving techniques, (2) analyze an algorithm to determine its (asymptotic complexity) expected run-time behavior as the problem size grows, and (3) select an appropriate problem solving technique for a specific problem. These problem solving techniques are divide-and-conquer, dynamic programming, greedy algorithms, backtracking, and branch-and-bound. Additionally, you should understand the concepts of computational complexity, intractability, and the theory of NP. Time permitting we may have an introduction to parallel algorithms.

Pedagogic Approach: In the first part of the course we will focus on being able to apply the problem solving techniques and fully understanding recursion. Then, we will change gears and work on analyzing the asymptotic complexity of the algorithms and selecting the appropriate problem solving technique for a specific problem. After this, we switch from analyzing individual problems to analyzing the computational complexity for classes of problems, such as sorting and searching. The remainder of the semester will be spent studying intractability, the theory of NP, approximation algorithms for NP-hard problems, and (time permitting) parallel algorithms.

Grading policy: There will be three tests (including the final) on the dates indicated below, so mark these dates on your calendar NOW! Tentative weighting of course components is:

In-class Participation: 5 %

Assignments: 20 %

In-class Test 1: 25 % (Early October)

In-class Test 2: 25 % (November 19)

Final: 25 % (1-2:50 PM Wednesday, December 18)

Grades will be assigned based on straight percentages off the top student score. If the top student score is 92%, then the grading scale will be, i.e., 100-82 A, 81.9-72 B, 71.9-62 C, 61.9-52 D, and below 52 F. Plus and minus grades will be assigned for students near cutoff points.

Special Notice: The Americans with Disabilities Act of 1990 (ADA) provides protection from discrimination for qualified individuals with disabilities. Students with a disability, who require assistance, will need to contact the Office of Disability Services (ODS) for coordination of academic accommodations. The ODS is located at 213 Student Services Center. Their phone number is (319) 273-2676.