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:
 Lecture Notes 
 
 Other Resources
 
 Lectures Notes on Data Structures
 Course Outline 
 
-  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.