Skip to main content
Table Of Contents (Partial)
Algorithms and Complexity
- What is an Algorithm?
- Pseudocode
- Problem Versus Problem Instance
- Correct Versus Incorrect Algorithms
- Fast Versus Slow Algorithms
- Big-O Notation
Algorithm Design Techniques
- Exhaustive Search Algorithms
- Branch-and-Bound Algorithms
- Greedy Algorithms
- Dynamic Programming Algorithms
- Recursive Algorithms
- Divide-and-Conquer Algorithms
- Randomized Algorithms
Programming Challenges
- Sum of Two Digits
- Maximum Pairwise Product
- Naive Algorithm
- Fast Algorithm
- Testing and Debugging
- Can You Tell Me What Error I Have Made?
- Stress Testing
- Even Faster Algorithm
- A More Compact Algorithm
- Solving a Programming Challenge in Five Easy Steps
- Reading the Problem Statement
- Designing an Algorithm
- Implementing an Algorithm
- Testing and Debugging
- Submitting the Grading System
- Good Programming Practices
Algorithmic Warm Up
- Fibonacci Numbers
- Last Digit of a Fibonacci Number
- Greatest Common Divisor
- Least Common Multiple
- Fibonacci Numbers Again
- Last Digit of the Sum of Fibonacci Numbers
- Last Digit of the Sum of Fibonacci Numbers Again
Greedy Algorithms
- Money Change
- Maximum Value of the Loot
- Maximum Advertisement Revenue
- Collecting Signatures
- Maximum Number of Prizes
- Maximum Salary
Divide and Conquer
- Binary Search
- Majority Element
- Improving QuickSort
- Number of Inversions
- Organizing a Lottery
- Closest Points
Dynamic Programming
- Money Change Again
- Primitive Calculator
- Edit Distance
- Longest Common Subsequence of Two Sequences
- Longest Common Subsequence of Three Sequences
- Maximum Amount of Gold
- Partitioning Souvenirs
- Maximum Value of an Arithmetic Expression
Citation
- Kulikov A. Learning algorithms through programming and puzzle solving. La Jolla, CA: Active Learning Technologies; 2018.