 Introduction
 What is an algorithm?
 Notation for programs
 Proof techniques
 Basics review: Sets  Functions  Limits  Simple series
 Fundamentals
 Instances and problems  Elementary operations.
 Efficiency
 Average and worstcase analysis
 Examples
 Asymptotic notation
 Introduction
 A notation for "the order of"
 The omega notation
 The theta notation
 The conditional asymptotic notation
 Analysis of algorithms
 Analyzing control structures
 Using a barometer
 Amortized analysis
 Solving recurrences
 Data structures
 Arrays, stacks and queues
 Records and pointers
 Lists, graphs, trees and associative tables
 Heaps
 Disjoint set structures
 Greedy algorithms
 Making change
 General characteristics of Greedy algorithms
 Graphs MST  Kruskal's and Prims's algorithms
 Graphs: shortest paths
 Knapsack problem
 Scheduling
 Divide  and  Conquer
 Multiplying large integers
 Binary search
 Sorting by: merging and quicksort
 Finding the median
 Matrix multiplication
 Exponentiation
 Quick look at cryptography
 Dynamic programming
 Making change
 Principles of optimality
 The knapsack problem
 Shortest paths  Floyd's algorithm
 Chained matrix multiplication
 Introduction to probabilistic algorithms  Parallel algorithms
 Introduction to computational complexity
