Open Educational Resources


Open Educational Resources (OER) are freely accessible, openly licensed documents and media that are useful for teaching, learning, educational, assessment and research purposes.


Course reviews will be shown here


This course provides an introduction to mathematical modeling of computational problems. It covers the common algorithms, algorithmic paradigms, and data structures used to solve these problems. The course emphasizes the relationship between algorithms and programming, and introduces basic performance measures and analysis techniques for these problems.

20 hours of valuable lecture videos

24 lectures + recitation videos

7 problems sets with solutions and exams with answer keys


Cormen, Thomas, Charles Leiserson, Ronald Rivest, and Clifford Stein. Introduction to Algorithms. 3rd ed. MIT Press, 2009. ISBN: 9780262033848.

For the student who finds books helpful, we also suggest:

Miller, Bradley, and David Ranum. Problem Solving with Algorithms and Data Structures Using Python. 2nd ed. Franklin, Beedle & Associates, 2011. ISBN: 9781590282571.

Related Resources


Beazley, David. Python Essential Reference. 3rd ed. Sams, 2006. ISBN: 9780672328626. [Preview with Google Books]


You will mostly use Math Mode in LaTeX, so pay particular attention to it in these resources; other topics (like document structure and compiling documents in various environments) are less relevant.

Kopka, Helmut, and Patrick Daly. A Guide to LaTeX: Document Preparation for Beginners and Advanced Users. 3rd ed. Addison-Wesley, 1999. ISBN: 9780201398250.


Prof. Erik Demaine

Prof. Srinivas Devadas

Creative Commons License
Introduction to Algorithms by Prof. Erik Demaine & Prof. Srinivas Devadas is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Based on a work at

Course content

  • Lecture 1: Algorithmic Thinking, Peak Finding

  • Lecture 2: Models of Computation, Document Distance

  • Lecture 3: Insertion Sort, Merge Sort

  • Lecture 4: Heaps and Heap Sort

  • Lecture 5: Binary Search Trees, BST Sort

  • Lecture 6: AVL Trees, AVL Sort

  • Lecture 7: Counting Sort, Radix Sort, Lower Bounds for Sorting

  • Lecture 8: Hashing with Chaining

  • Lecture 9: Table Doubling, Karp-Rabin

  • Lecture 10: Open Addressing, Cryptographic Hashing

  • Lecture 11: Integer Arithmetic, Karatsuba Multiplication

  • Lecture 12: Square Roots, Newton's Method

  • Lecture 13: Breadth-First Search (BFS)

  • Lecture 14: Depth-First Search (DFS), Topological Sort

  • Lecture 15: Single-Source Shortest Paths Problem

  • Lecture 16: Dijkstra

  • Lecture 17: Bellman-Ford

  • Lecture 18: Speeding up Dijkstra

  • Lecture 19: Dynamic Programming I: Fibonacci, Shortest Paths

  • Lecture 20: Dynamic Programming II: Text Justification, Blackjack

  • Lecture 21: Dynamic Programming III: Parenthesization, Edit Distance, Knapsack

  • Lecture 22: Dynamic Programming IV: Guitar Fingering, Tetris, Super Mario Bros.

  • Lecture 23: Computational Complexity

  • Lecture 24: Topics in Algorithms Research

  • Final exam

  • Assignments

  • Recitation videos

Interested? Enroll to this course right now.

There is more to learn