Design and Analysis of Algorithms (810:153), Fall 2003

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

Instructor: Mark Fienup (

Office: Wright Hall 321 Phone: 273-5918

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

Prerequisites: You should have successfully completed Computer Organization (810:041) and the Computer Science III (810:063) courses.

Course Goals: After this course, you should be able to (1) analyze an algorithm to determine its asymptotic complexity (expected run-time behavior as the problem size grows), (2) design solutions to problems by using classical problem solving techniques, (3) select an efficient algorithm for a specific problem if one exists, and (4) be able to apply appropriate techniques to find a solution to a problem when no efficient algorithm can be found (intractable problems). The problem solving techniques are brute force, divide-and-conquer, decrease-and-conquer, transform-and-conquer, space-and-time tradeoffs, dynamic programming, and greedy algorithms. To solve intractable problems we will look at the techniques of backtracking, branch-and-bound, and approximation algorithms. Along the way, you should gain an intuitive understand of the concepts of computational complexity, intractability, and the theory of NP.

Pedagogic Approach: In class, I'll tend to break up the lecture with active and group learning exercises to aid learning. While this is not formally graded, a small part (5%) of your grade will be based on your participation of these in-class activities. Students benefit by (1) increased depth of understanding by staying awake in class, (2) increased comfort and confidence, (3) increased motivation, and (4) being better prepared to work in groups on the job. This might sound great, but it will require you (and me) to work differently to prepare for class. Before the class, you must read the assigned reading, and thought about what I've asked you to think about, etc.; otherwise you won't be able to effectively participate in your group during class.

Text: Introduction to the Design & Analysis of Algorithms, Levitin, Addison-Wesley, 2003. ISBN 0-201-74395-7

Assignments: Several types of assignments will be assigned, including exercises from the textbook and programming exercises (language of your choice). Students may work in small groups (2 or 3) on most of the assignments. If a group of students work on an assignment, hand in only one copy of the assignment solution with the name of each group member. WARNING: as a group member you are expected to fully participate on all problems. If you are not learning from the assignments, you will perform poorly on the tests!

Grading policy: In addition to the homework assignments, three in-class tests will be given. Test 1 will cover analysis of algorithms to determine asymptotic complexity (expected run-time behavior as the problem size grows). Test 2 will cover applying the problem-solving techniques. The final examination will be comprehensive with an emphasis on material covered after test 3. The in-class tests will be announced at least one week in advance to allow you time to prepare. Tentative weighting of course components is:

In-class participation 5 %

Assignments: 20 %

Test 1 20 % (~September 25)

Test 2: 25 % (November 18)

Final: 30 % (1-2:50 PM on Wednesday, December 17)

Grades will be assigned based on straight percentages off the top student score. If the top student's 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.