Spring 1997
Schedule
All section references are to the textbook,
Fundamentals of Algorithms, by Brassard and Bratley.
-
97.01.14
-
Problems, instances of problems, algorithms to solve problems,
efficiency of algorithms, average and worst-case analyses
(Sections 1.1, 1.2, 1.3, 2.1, 2.2, 2.3, 2.4). Example:
Multiplication, 2 algorithms ("standard" and "a la russe").
Example: Sorting, 2 algorithms ("insertion sort" and
"selection sort").
-
97.01.16
-
Estimating the running time of an algorithm (Sections 2.5, 4.2).
Iterative and recursive algorithms to compute Fibonacci numbers
(Subsection 2.7.5, Section 4.2). Rates of growth (Section 2.6).
"Big Oh" notation (Section 3.2 -- omit the proofs of the different
rules: threshold rule, maximum rule, limit rule).
-
97.01.21
-
Sequential (or linear) search, binary search, their run times,
iterative and recursive implementations of binary search (Section 7.3,
Subsection 4.2.4). Complete and essentially complete binary trees
(bottom half of page 162 and top half of page 163).
Big Omega and big Theta (Section 3.3). Conditional asymptotic notation
(Section 3.4 -- omit proof of smoothness rule).
-
97.01.23
-
Divide-and-conquer algorithms for multiplication (pages 4-5,
Subsection 2.7.3, Section 7.1). Methods for solving recurrence
relations (Subsection 4.7.1, Example 4.7.10 on pages 130-131).
-
97.01.28
-
Reading: Graphs and trees, and their representations in memory
(Sections 5.4, 5.5). Heaps and operations on heaps (Section 5.7).
-
97.01.30
-
Analysis of make-heap (Theorem 5.7.1). Heapsort and its analysis
(Theorem 5.7.2). Binomial trees, binomial heaps (first 4 pages of
Section 5.8).
-
97.02.04
-
Finish binomial heaps and the analysis of operations on binomial
heaps (Section 5.8). Amortized analysis (Section 4.6).
-
97.02.06
-
Recapitulate amortized analysis of inserting an item into
a binomial heap (Section 5.8). Begin greedy algorithms.
Making change (Section 6.1). Reading: Characteristics of
greedy algorithms (Section 6.2). Minimum spanning trees:
Kruskal's and Prim's algorithms (Section 6.3).
-
97.02.11
-
Disjoint set structures (Section 5.9). Minimum spanning trees
(Lemma 6.3.1, page 192).
-
97.02.13
-
Implementation of Kruskal's algorithm, based on disjoint set
structures, and its run-time analysis (Section 6.3). Reading:
Implementation of Prim's algorithm and its run-time analysis
(Section 6.3). Dynamic programming: Calculating binomial
coefficients (Subsection 8.1.1), making change (Section 8.2).
Reading: The principle of optimality (Section 8.3).
Greedy algorithms: Fractional knapsack problem (Section 6.5).
-
97.02.25
-
Dynamic programming: 0-1 knapsack problem (Section 8.4).
Greedy algorithms: Begin Dijkstra's algorithm for finding
"single-source shortest-paths" in a weighted directed graph
(Section 6.4).
-
97.02.27
-
Greedy algorithms: Complete Dijkstra's algorithm (Section 6.4).
Dynamic programming: Floyd's algorithm for "all-pairs shortest-paths"
in a weighted directed graph (Section 8.5) Dynamic programming:
Begin algorithm for optimal "chain matrix multiplication" (Section 8.6).
-
97.03.04
-
Chained matrix multiplication completed (Section 8.6).
Divide-and-conquer: Begin mergesort (Subsection 7.4.1).
-
97.03.06
-
Divide-and-conquer: Mergesort completed (Subsection 7.4.1).
General template for divide-and-conquer algorithms, recurrence
relations (Section 7.2). Start quicksort (Subsection 7.4.2).
-
97.03.18
-
Divide-and-conquer: Complete quicksort (Subsection 7.4.2),
go easy with the proof of Theorem 7.4.1. Matrix multiplication
(Section 7.6). Start exponentiation (Section 7.7).
-
97.03.20
-
Divide-and-conquer: Complete exponentiation (Section 7.7).
Start exploring graphs (Chapter 9): Graphs and games (Section 9.1),
traversing trees (Section 9.2).
-
97.03.25
-
Complete traversing trees (Section 9.2). Depth-first search on
undirected graphs and applications (Section 9.3).
Depth-first search on directed graphs and applications (Section 9.4).
-
97.03.27
-
Breadth-first search on trees, undirected graphs, directed graphs
(Section 9.5). Backtracking, the knapsack problem (Subsection 9.6.1).
-
97.04.08
-
Backtracking, the knapsack problem (Subsection 9.6.1), the general
template (Subsection 9.6.3). Branch-and-bound, the assignment
problem (Subsection 9.7.1).
-
97.04.10
-
Branch-and-bound, the knapsack problem (Subsection 9.7.2).
Start parallel algorithms (Section 11.1). Computing with
a complete binary tree (Subsection 11.2.1), pointer doubling
(Subsection 11.2.2).
-
97.04.15
-
Parallel algorithms. Complete pointer doubling (Subsection 11.2.2).
Work efficiency (Section 11.3). Shortest paths using parallel
algorithms (Subsection 11.4.1).
-
97.04.17
-
Parallel algorithms: Complete shortest paths algorithm (Subsection 11.4.1).
Computational complexity: Lower bounds using information-theoretic arguments
(Section 12.1) and adversary arguments (Section 12.3 to the end of
subsection 12.3.1).
-
97.04.22
-
Computational complexity: The classes P and NP (Section 12.5 to the end
of subsection 12.5.1). Alternative definition of NP in terms of
"nondeterministic polynomial-time algorithms" (Subsection 12.5.6).
-
97.04.24
-
Heuristic and approximate algorithms. Heuristics (Section 13.1).
Approximate algorithms for the travelling salesperson problem
(Subsection 13.2.1).
-
97.04.29
-
Heuristic and approximate algorithms.
Approximate algorithms for the knapsack problem and the bin packing
problem (Subsections 13.2.2 and 13.2.3).
Assaf Kfoury
Created: 97.01.08
Modified: 97.04.29