# CS 6212 Design and Analysis of Algorithms

## Summary

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 1311, CS 1112.

Text: Introduction to Algorithms, Cormen, Leiserson Rivest, and Stein, third Edition, 2009

Announcement:

## 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.
```
```