CS 212 Design and Analysis of Algorithms


Design and analysis of algorithms using six algorithmic design techniques: divide-and-conquer, greedy method, dynamic programming, tree and graph traversals, backtracking, and branch-and-bound. Lower bound theory. NP-complete theory.

Prerequisites: CS 123, CS 133.

Text: Introduction to Algorithms, Cormen, leiserson and Rivest, McGraw-Hill, 2001

Announcement: The classroom has been changed to Phillips Hall 306.

Summer 11 Handouts

Sample Work: Summer 2001

Lecture Notes

Other Resources

Lectures Notes on Data Structures

Course Outline

  1. Basic Principles of Algorithm Design and Analysis
  2. Data Structures: Stacks, queues, linked lists, trees, binary search trees, heaps, graphs, sets, union-find
  3. The Divide and Conquer Method: Overall technique, mergesort, quicksort, quickselect, FFT, etc.
  4. The Greedy Method: Overall technique, the knapsack problem, optimal merge pattern, Huffman coding, minimum spanning tree, single-sourse shortest paths problem, etc.
  5. Dynamic Programming: Overall technique, matrix chain problem, all-pairs shortest path problem, optimal binary search trees, etc.
  6. Graph Traversal Techniques: Tree traversal and applications, depth-dirst search, bread-first search, connectivity algorithms, biconnectivity algorithms, etc.
  7. Backtracking: Overall technique, generation of combinatorial objects such as graphs, sets, permutations, graph colorings, cliques, Hamiltonian cycles, etc.
  8. Branch and Bound method: Overall method, the 0/1 knapsack problem, the job assignment problem, the traveling salesman problem, etc.
  9. Lower bound theory: Techniques for determining complexity lower bounds of problems, algorithm modeling, application to lower bound on sorting, searching, and merging.
  10. Introduction to the Theory of NP-completeness: Nondeterministic algorithms, complexity classes, NP-completeness, problem reduction, Specific NP-complete problems.