## Algorithms

These are some notes I've written about algorithms. They are heavily inspired by multiple textbooks: *Algorithms* by Dasgupta, Papadimitriou, and Vazirani; *Algorithms* by Erickson; *Algorithm Design* by Kleinberg and Tardos; and *Introduction to Algorithms* by Cormen, Leiserson, Rivest, and Stein. I recommend all of them.

You can get the whole thing here, or download individual chapters below. (Some chapters reference each other, but for the most part, every chapter is self-contained.)

- Chapter 1: Array Algorithms

- Chapter 2: Basic Graph Algorithms

- Chapter 3: Greedy Algorithms

- Chapter 4: Dynamic Programming

- Chapter 5: Shortest Paths

- Chapter 6: Flows and Cuts

- Chapter 7: Linear Programming

- Chapter 8: NP-Hardness

- Chapter 9: Approximation Algorithms

## Theory of Computation

These notes are primarily written for anyone studying from the book *Introduction to the Theory of Computation* by Michael Sipser, specifically the third edition. I think the book is excellent, and I strongly recommend it. These notes are not meant to be a substitution for the book. Instead, I think of them as an unofficial *companion* to the book — they provide only a partial summary of the book. I hope you find them useful.

You can get the whole thing here.

Please feel free to send me any feedback (even if it's only about a typo). My email address is "nusnivek [at] gmail [dot] com". You can also message me anonymously using this form.