CS 600 Algorithms and Data Structures

Fall 2003



Instructor:
Shunichi Toida, Professor
Department of Computer Science, ODU
Office: Room ED 252-4
Phone: 683-3392


Textbook:
T. H. Cormen, C. E. Leiserson, and R. L. Rivest, Introduction to Algorithms, 2nd ed.,
McGraw-Hill Book Company, New York, NY, 2001.


Prerequisite:
CS 361 and Math 330 or equivalent.
These prerequisites are a must.


Grading:
    Homework: 15%
    Project:       15%
    Test x 2:       35%
    Final Exam:   35%


Attendance:
Class attendance is strongly recommended.


Important Note:
Lying, cheating, plagiarism and failure to report such cases
all constitute violation of the Honor System.


Office Hours:
Mondays 4:00 - 5:00 p.m.
Wednesdays 4:00 - 5:00 p.m.
You may also walk in any other time. My door is always open.


Final Exam :
3:45 p.m. - 6:45 p.m., Tuesday, December 9, 2003.


Course Objectives:

1.
To familiarize oneself with the time complexity analysis of algorithm
2.
To learn various time complexity classes and their relationships
3.
To learn about "hard" problems (what they are, how to recognize them, how to cope with them)
4.
To learn problem solving techniques - among others recognizing solved problems, and modeling given problems with them



Course Outline:

First the worst case time analysis of algorithm is reviewed together with necessary mathematics using an example.
Then the average time analysis is presented for the quick sort algorithm with a review on probability.

Next various degrees of difficulty of problem with respect to the worst case time are discussed. In particular the concept of NP-hardness, NP-complete problems and their recognition are studied. If the worst case time grows exponentially or worse with the problem size, the problem is considered (and often called) a 'hard' problem. NP-hard problems are considered 'hard'.

Then some of the well-known solved problems are presented together with well established methods for solving them and it is shown how many practical problems can be solved using them. These include linear programming, network flow problems, graph problems and finite automata.

For 'hard' problems mentioned above there are no known ways of solving them within a reasonable amount of time. However, many of them appear in practice and solutions must be found quickly. To cope with this problem numerous attempts have been made over decades. Some of the major approaches including approximation, branch-and-bound, simulated annealing and genetic algorithms are studied here.

Bibliography

1.
S. Baase, Computer Algorithms - Introduction to Design and Analysis Second ed., Addison-Wesley, 1993
A good introductory book for reviewing time complexity analysis
2.
M. Gary and D. Johnson, Computers and Intractability - A Guide to the Theory of NP-Completeness, Freeman, San francisco, 1979
THE book on NP-completeness. It is quite challenging, though.
3.
R. Karp, On the Computational Complexity of Combinatorial Problems, Networks, A very good explanation of Class NP 5, pp. 45 - 68, 1975.
4.
F. S. Hillier and G. J. Lieberman, Introduction to Operations Research, McGraw-Hill, 1995.
5.
V. Chvatal, Linear Programming, Freeman, San Francisco, 1983.
A very good book. Well researched. Relatively easy to follow.
6.
H. Karloff, Linear Programming, Birkhauser, Boston, 1991
Nice and short. Karmarkar's polynomial time algorithm is covered.
7.
R. Ahuja, T. Magnanti, and J. Orlin, Network Flows, Prentice-Hall, 1993
Many interesting applications of network flow problems
8.
E. Aarts and J. Korst, Simulated Annealing and Boltzmann Machines, John Wiley and Sons, 1989
Explains how SA works, problems with SA, problem formulation. Well written. Not so difficult to follow if you know probability theory. Read first two chapters skipping proofs.
9.
D. Goldberg, Genetic Algorithms, Addison-Wesley, 1989
Very good introductory book. Explains the working of genetic algorithm very well. Easy to read.
10.
G.L. Nemhauser and L.A. Wolsey, Integer and Combinatorial Optimization, Wiley Interscience, 1988
Very good book. For advanced students.

Lecture Schedule

Lecture No. Date Subjects Covered Sections
1 08-26 Course objectives, Outline  
    Growth of functions, L'Hospital's Rule 1.1 - 3.2
2 08-28 Review of Worst Case Time Analysis, Recurrence Chap. 4
3 09-02 Average Time Analysis -- Introduction
4 09-04 Average Time Analysis(Sequential Search)
5 09-09 Quicksort Analysis (Average Time) Textbook 7.3, 7.4
6 09-11 "Hard" Problems(Overview, Class NP) Handout, 34.1, 34.2
7 09-16 "Hard" Problems(NP-Completeness) 34.1, 34.2
8 09-18 Recognition of NP-Complete Problems (Reduction) 34.4
9 09-23 Recognition of NP-Complete Problems (Reduction) 34.5
10 09-25 Unsolvable Problems Handout
11 09-30 Test 1 Lectures 1 - 10 inclusive
12 10-02 Linear Programming (Simplex Method) Handout (Web)
13 10-07 Linear Programming(Formulation by LP) Handout
14 10-09 Linear Programming(Pitfalls) Handout
- 10-11 Fall Holidays
- ~ ...
- 10-14 Fall Holidays
15 10-16 Separable Convex Programming Handout
16 10-21 Integer Programming Handout
17 10-23 Network Flow Problems:Overview, Max Flow 26.1, 26.2, Handout
18 10-28 Feasible Flow Handout
19 10-30 Flows with Lower Bounds Handout
20 11-04 Test 2 Lectures 10 - 18 inclusive of this schedule
21 11-06 Flow Applications Handout
22 11-11 Flow Applications Handout
23 11-13 Graph Models Handout
24 11-18 Coping with NP-Completeness - Approximation Handout
25 11-20 Coping with NP-Completeness - Dynamic Programming Handout
26 11-25 Coping with NP-Completeness - Branch & Bound Handout
- 10-11 Thanksgiving Day Holidays
- ~ ...
- 10-14 Thanksgving Day Holidays
27 12-02 Coping with NP-Completeness - Stochastic Methods Handout
28 12-04 Review  
29 12-09 Final Exam Lectures 1 - 27