Syllabus
Algorithm Analysis: Methodologies for Analyzing Algorithms, Asymptotic Notation, Recurrence Relations. Data Structures: Linear Data Structures (Stacks, Queues, Linked-Lists, Vectors), Trees (Binary Search Trees, AVL trees, Red-Black trees, B-trees), Hash-Tables (Dictionaries, Associative Arrays, Database Indexing, Caches, Sets) and Union-Find Structures. Searching and Sorting(Insertion and Selction Sort, Quick Sort, Merge Sort, Heap Sort, Bucket Sort and Radix Sort), Comparison of sorting algorithms and lower bounds on sorting. Fundamental techniques: The Greedy Method, Divide and Conquer, Dynamic Programming. Graph Algorithms: Elementary Algorithms, ie Breadth-first search, Depth-first search, Topological sort, Strongly connected components. Minimum Spanning Trees, Single-Source Shortest Paths, All-Pairs Shortest Paths, Maximum Flow, Network Flow and Matching, Flows and Cuts. Nondeterministic Polynomial Time Problems: P and NP, NP-Complete, NP-Hard, Important NP-Complete/Hard Problems.
Significant labs: Implementation of algorithms using a structured or object-oriented programming language.