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