Learn in Public: Data Structures & Algorithms in Python
Tags: 30daysofwriting, beginners, computerscience, career
Published: 2019-11-20 02:21:05

I am currently working on becoming more proficient in Data Structures and Algorithms - both for the sake of interviewing and to become a better engineer.

In the following weeks and months, I'll share with you what I've learned along my journey. The content will include:
* The theory and application of Data Structures & Algorithms.
* My interviewing experience, tips, and tricks.
* Fun problems you can solve using what we've learned.

❗️*Please share any additional resources that you'd recommend, and topics that I forgot to add in the comments below!*

### Learning Method
I love learning, but I am not an efficient student. I am great at "consuming" material, like taking courses and going through tutorials. But if you ask me to explain what I've learned, I wouldn't be able to do so. I would say "it just slips my mind", but truth be told I never do the work to commit the material into my long term memory.

This time it is going to be different, and I am going to utilize the following two strategies to improve my retention of what I've learned:
* Use scientific methods for [efficient learning](https://dev.to/codebalance/upgrade-your-learning-an-example-study-plan-for-data-structures-and-algorithms-5he).
* Following the idea of [learning in public](https://dev.to/miku86/learn-in-public-4jl2), I am going to summarize and share what I'm learning along the way. Learning by teaching makes sure you truly understand the material.

## List of Resources
For now, let's start with a summary of resources and a list of topics we'll cover in the following weeks and months. 

This is not an exhaustive list of all the resources that are available on the WWW, but rather a list of courses I find intriguing, and the books I own.

Legend to indicate where I'm at:
❗️: Currently working on
✅: Done
💤: Done, but needs a refresher

This is a living list, meaning I'll be coming back and updating it as I work through the material.

### Data Structure & Algorithm Courses
* Coursera
  * [Algorithms Specialization](https://www.coursera.org/specializations/algorithms), Stanford
  * [Data Structures & Algorithms Specialization](https://www.coursera.org/specializations/data-structures-algorithms), University of California San Diego
  * [Algorithms, Part I](https://www.coursera.org/learn/algorithms-part1), Princeton University 💤
  * [Algorithms, Part II](https://www.coursera.org/learn/algorithms-part2), Princeton University
* Udacity
  * [Data Structures & Algorithms Nanodegree](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256) ✅

### Books
* Theory
  * [Introduction to Algorithms](https://www.goodreads.com/book/show/108986.Introduction_to_Algorithms)
  * [Grokking Algorithms: An illustrated guide for programmers and other curious people](https://www.goodreads.com/book/show/22847284-grokking-algorithms-an-illustrated-guide-for-programmers-and-other-curio?from_search=true&qid=QFldwVIhkg&rank=1)
* Practice Problems
  * [Cracking the Coding Interview](https://www.goodreads.com/book/show/12544648-cracking-the-coding-interview?ac=1&from_search=true&qid=ahksNnxJ0I&rank=2)
  * [Daily Coding Problem](https://www.goodreads.com/book/show/44151058-daily-coding-problem?ac=1&from_search=true&qid=kfqKCpFN6s&rank=1)
  * [Elements of Programming Interviews](https://www.goodreads.com/book/show/16253895-elements-of-programming-interviews?from_search=true&qid=fPpgfMxaD6&rank=1)
  * [Programming Interviews Exposed](https://www.goodreads.com/book/show/154154.Programming_Interviews_Exposed)


### Websites
* [CodeSignal](https://app.codesignal.com/signup/BCTXJe6pi89ruzqdr/main) ❗️
* [Pramp](https://www.pramp.com/invt/oAJ6gVQgxptApdovYQjr), these are actual mock interviews with real people. You get to experience both sides: Being the interviewee as well as interviewing your peers.



### Content
* Analyzing Algorithms
  * Asymptotic Notation
  * Amortized Analysis
  * Probabilistic Analysis & Randomized Algorithms
* Data Structures
  * Arrays & Linked Lists ❗️
  * Stacks & Queues
  * Hash Tables
  * Trees
    * Binary Search Trees
    * Red-Black Trees
    * B-Trees
    * Binomial Trees & Binomial Heaps
  * Fibonacci Heaps
  * Data Structures for Disjoint Sets
* Recursion
* Sorting & Order Algorithms
  * Heapsort
  * Quicksort
  * Sorting in Linear Time
* Graph Algorithms
  * Breadth-first search (BFS)
  * Depth-first search (DFS)
  * Topological Sort
  * Minimum Spanning Trees
  * Single-Source Shortest Paths
  * All-Pairs Shortest Paths
  * Maximum Flow
* Dynamic Programming
* Greedy Algorithms
* Linear Programming
* Sorting Networks
* Matrix Operations
* Polynomials & the FFT
* Number-Theoretic Algorithms
* String Matching
* Computational Geometry
* NP-Completeness
* Approximation Algorithms
* Maps & Hashing
* Tries
* Heaps
* Divide & Conquer
* A*