Course Link: Algorithmic Toolbox

I wanted to review algorithmic proofs in preparation for my Master’s program. One of my friends so I decided to give it a try. This turned out to be a great refresher.

The brute force solutions are already given and won’t pass the tests. You need to design and implement an efficient algorithm to pass. I solved the problems in Python but submissions can be made in other languages as well (see below for a full list).

Here are some prerequisite clarifications, resources to review before starting, and suggested resources to help you along the way.

**Prerequisites**

- Basic Discrete Mathematics knowledge (for proofs)
- Logarithms
- Sets
- Series
- Intermediate knowledge of one of the following programming languages.
- Python
- C++
- Java
- C#
- Javascript,
- C
- Haskell
- Ruby
- Rust
- Scala

Problems range from Leetcode medium to hard. Official starter codes are given in C++, Python, and Java. There are community provided starter codes in other languages for some challenges.

## Prerequisites Review Suggestions

For logarithms, read the linked article below and then look up the rules of logarithms.

For sets, series, and basic discrete math review, read chapter 0 and chapter 2 of Discrete Mathematics An Open Introduction, 3rd Ed and watch Eddie Woo’s set theory playlist.

If you’re not familiar with proofs, I’d suggest watching Abdul Bari’s algorithm playlist. They are easier to follow than the course’s lectures.

## Suggested Resources

### Books

- The Algorithm Design Manual - Steven Skiena (2nd Ed)
- Discrete Mathematics An Open Introduction, 3rd Ed

### Videos/Playlists

- Set Theory Playlist - Eddie Woo
- Data Structures Playlist - WilliamFiset
- Algorithms Playlist - Abdul Bari
- 3-Partition Lecture Part 1