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

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.

Python

- Python Tutorial
- Debugging In Python
- 6.01 Python Resource list
- IPython, an enhanced interactive shell for use on the command line.
- Python Cost Model
- Python video tutorials

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

LaTeX

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.

- LaTeX Tutorial
- Draw a symbol to get its LaTeX command
- LaTeX Symbols
- Manual for clrscode.sty (PDF)
- A (Not So) Short Introduction to LaTeX2e (PDF - 2.0MB)
- TeXnicCenter (IDE for Windows)
- LyX for Windows (IDE for Windows)
- MiKTeX (IDE for Windows)
- proTeXt based on MiKTeX (IDE for Windows)

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

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 http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/index.htm.

#### 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