Welcome to my notes dump!
I spend a lot of time thinking about how to teach algorithms, and I realize that I should probably spend some time writing my ideas down. This page is a rough and incomplete approximation of how I'd teach an algorithms class, updated whenever I decide to write down a new set of notes or rethink what belongs in the course. Given that I learned algorithms from UC Berkeley's CS170, these notes will likely be influenced by them.
Material is divided into three types: core, supporting, and peripheral.
Material assumes a CS1-equivalent background (control flow, data structures), as well as familiarity with math up to calculus. More familiarity in CS and in mathematics is helpful but not necessary.
Please feel free to use these notes if you'd like (for non-commercial purposes, obviously)! If you have any questions, feel free to reach out at liujon23 (at) berkeley (dot) edu. I also happily welcome any civil discussion/suggestions/criticisms about these notes.
What are algorithms, why should we think about them, and how should we think about them?
Some big ideas we'll encounter repeatedly when talking about algorithms.
How we classify the difficulty of computational questions.