Foundations of Algorithms
CSCI-665 section 5
bldg. 70B, room 3657,
(585) 475-5193, firstname.lastname@example.org
Tue/Thu 8-9pm, Wed 2-3pm
(if nobody comes by 8:15pm I may leave), or send email
Tuesday/Thursday, 6:30pm - 7:45pm, room 70-2455
General Course Documents
Syllabus, outcomes, general course documents, policies, sample schedule:
This page gives the current offering's contents and schedule.
- T. Cormen, C. Leiserson, R. Rivest and C. Stein,
Introduction to Algorithms,
the MIT Press, 2009, third edition, required textbook.
- J. Kleinberg and E. Tardos,
Addison-Wesley, 2006 (past textbook, optional).
- S. Dasgupta, C. Papadimitriou and U. Vazirani,
McGraw-Hill, 2007 (past textbook, optional).
- D. Knuth,
The Art of Computer Programming,
vols. 1, 2, 3, Addison-Wesley, 1981 (The Book, optional).
- A. Aho, J. Hopcroft and J. Ullman,
The Design and Analysis of Computer Algorithms ,
Addison-Wesley, 1976 (old good times, optional).
- D. Kreher and D. Stinson,
Combinatorial Algorithms, Generation, Enumeration and Search,
CRC Press, 1999 (complementary reading).
- D. Harel,
Algorithmics, The Spirit of Computing ,
Addison Wesley, 1992 (optional).
- G. Brassard and P. Bratley,
Fundamentals of Algorithmics,
Prentice Hall, 1996 (optional).
Programming, preferred C/C++ and UNIX environment.
(CSCI 603, CSCI 605, and CSCI 661, with B or better in all courses)
or equivalent or permission of instructor. Students who take CSCI 261
may not take CSCI 665 for credit.
- 25% Homeworks
- 15% first Midterm Exam, Tuesday, February 28, in class
- 15% second Midterm Exam, Thursday, April 6, in class
- 20% Experimental Project
- 25% Final Exam, Tuesday, May 16, 6:30pm - 8:30pm, LBR 6-2233
from the MIT Open Courseware.
Some slides prepared by Gordon Royle, University of Western Australia.
- Introduction and complexity
(MIT lectures 1,
- Computational problems, algorithms, input size
- Asymptotic notation
- Recurrences, master theorem
- Divide and conquer
- Dynamic programming
(MIT lecture 15)
- Longest common subsequence
- Matrix-chain multiplication
- Greedy algorithms
(MIT lecture 16)
- Definition of graph, basic graph terminology
- Minimum spanning trees - Prim
- Minimum spanning trees - Kruskal
- Priority queues, heaps, find-union algorithms
- Path algorithms
(MIT lectures 17,
- Breadth-first search, applications of breadth-first search.
- Depth-first search, topological sort
- Dijkstra's algorithm
- Relaxation, Bellman-Ford
- Matrix multiplication method
- Floyd-Warshall algorithm
- Johnson's algorithm
- Linear space Hirschberg's algorithm for the LCS
- Network Flow
- Flow networks, flows, Ford-Fulkerson method, cuts
- Max-flow Min-Cut, Edmonds-Karp heuristics
- String processing
- Pattern-matching, Rabin-Karp algorithm, Knuth-Morris-Pratt algorithm and
the Boyer-Moore algorithm.
website with implementations and comments on various string algorithms.
- P and NP
- Complexity classes P and NP, P!=NP conjecture
- Reducibility, NP-completeness
- Attemps to solve traveling salesman and other NP-hard problems
- Approximation Algorithms, Nearest Neighbour methods
- Iterative improvement, Hill-climbing, Simulated annealing, Genetic Algorithms
- A* algorithm
- Search problems, estimates, under-estimates and the A* algorithm