Based on freeCodeCamp.org: Algorithms and Data Structures + others.
- Learning Objectives
- What is an algorithm?
- What is algorithmic thinking?
- Correctness
- Efficiency
- What is Big O?
- Time, Space, and n
- Linear Search -
py01_search_linear.py
- Iterative Binary Search -
py02_search_binary.py
- Recursive Binary Search -
py03_search_recursive.py
- O(n*k) - Polynomial Runtimes, upper bound
- O(1) - Constant Runtime
- O(n) - Linear Runtime
- O(log n) - Logarithmic Runtime
- O(log2 n + 1) - Binary Runtime
- O(n^2) - Quadratic Runtime
- O(n^3) - Cubic Runtime
- O(n log n) - Quasilinear Runtime
- O(x^n) - Exponential Runtimes - Brute Force
- O(n!) - Factorial / Combinatorial Runtimes - Traveling Salesman
- O(1) - Constant Space - Linear & Iterative Binary Search
- O(log n) - Logarithmic Space - Recursive Binary Search
- Recursion Depth
- Learning Objectives
- What is a data structure?
py04_arrays.py
- Key Python Points
- Homogenous and Heterogenous Arrays
- Contiguous and Non-Contiguous Structures
- Homogenous Arrays and Contiguous Memory
- Heterogeneous Arrays and Contiguous Memory
- More About Contiguous Memory
- Amortized Memory
py05_linked-lists.py
- Self referential nodes
- Single and doubly linked lists
- Head and tail nodes