# Algorithms explained

yourbasic.org

### Algorithms

- Algorithms: What’s the problem?
- Introduction to graph algorithms: definitions and examples
- Dynamic programming with memoization [step-by-step example]
- Las Vegas vs. Monte Carlo algorithms
- Blackjack card counting risk analysis: poor gains at huge risk
- What’s a seed in a random number generator?
- Generate all permutations

### Data structures

- Time complexity of array/list operations [Java, Python]
- Hash tables explained [step-by-step example]
- How to avoid initializing memory [impractical]
- Binary search trees explained
- Treaps: Randomized search trees
- Bloom filters explained

### Sorting

### Correctness

- Loop invariants can give you coding superpowers
- On induction and recursive functions, with an application to binary search

### Analysis

- How to analyze time complexity: Count your steps
- Big O notation: definition and examples
- Time complexity of recursive functions [Master theorem]
- Unit cost vs. bit cost in time complexity
- Amortized time complexity

### Software engineering

- API design: principles and best practices
- Object-oriented programming without inheritance
- Functional programming in Go [case study]