CS 410 Top: Algorithm Design & Analysis

Credit Hours: 4
Course Coordinator: N/A
Course Description: An advanced, in-depth study of the design and analysis of algorithms. 'Topics include models of computation, sorting, data structures, graph algorithms, matrix multiplication, fast Fourier transforms, polynomial arithmetic, pattern matching, and NP-complete problems.
Prerequisites: Introductory course in algorithms, data structures, discrete math.
Goals: Upon the successful completion of this course students will be able to:
  1. Analyze a straightforward algorithm that involves simple loop structures.
  2. Set up recurrence equations that describe the time complexity of recursive algorithms, and solve the straightforward cases.
  3. Apply a repertoire of standard algorithms and techniques to novel problems.
  4. Read the well-written description of an algorithm from the computing literature and convert it to code that achieves the best asymptotic performance for that algorithm.
  5. Use asymptotic notation correctly.
  6. Recognize NP-complete problems and apply appropriate techniques to solve them.
  7. Recognize problems where dynamic programming is an appropriate solution method and be able to apply it.
  8. Describe the way to prove a problem is NP-complete.
  9. Apply divide-and-conquer techniques to develop problem solutions, and analyze the time complexity of the resulting algorithm.
  10. Recognize opportunities for creative application of sorting and hashing techniques to develop problem solutions.
  11. Apply the concept of amortized analysis in straight forward cases.
Textbooks: Introduction to Algorithms (2nd edition), by Cormen et al.
References: None.
Major Topics:

  • Review of data structures, sorting algorithms, asymptotic notation, loop invariants, analysis of simple loops, recurrences and the divide-and-conquer strategy.
  • Breadth first and depth first search and applications; other graph algorithms as time permits.
  • Proofs using structural induction, using graph algorithms as the example.
  • Computational geometry and the use of sorting and balanced trees to achieve good performance.
  • NP-completeness: definition, proof, reductions, approximations.
  • Fast Fourier transforms as an example of divide and conquer.
  • Amortized analysis.
  • Strassen's algorithm (divide and conquer) and multiplication of a string of matrices (dynamic programming)
  • String matching (if time permits)
Laboratory Exercises: The class requires written homework and a major project, plus occasional programming exercises.

CAC Category Credits Core Advanced
Data Structures 0.5 1.0
Algorithms 0.5 2.0
Software Design
Computer Architecture
Programming Languages

Oral and Written Communications: Every student writes a paper of about 10 pages explaining and commenting on a paper in the recent computing literature.
Social and Ethical Issues: None.
Theoretical Content: Analysis of algorithms, algorithm selection, associated mathematical techniques, concept of NP-completeness, techniques for proving algorithms are correct.
Problem Analysis: A major goal of the course is to teach students to choose an appropriate algorithm to solve a problem. In a sense the whole class is about analyzing this problem.
Solution Design: The students will learn to design good algorithms for solving problems of various types.