loading...

CS Level Up Series Introduction

jjb profile image JB Updated on ・3 min read

CS Level Up Series (30 Part Series)

1) CS Level Up Series Introduction 2) Dynamic Arrays 3 ... 28 3) Linked Lists 4) Stacks 5) Queues 6) Hash Tables 7) Binary Search Trees 8) Binary Heaps 9) Priority Queues 10) Graphs 11) Tries 12) Binary & Bit Manipulation 13) Common Sorting Algorithms 14) Searching Algorithms 15) Permutations, Combinations, & Subsets 16) NP-Complete & Fibonacci Heap 17) Detecting Graph Cycles With Depth-First Search 18) Finding Shortest Paths In Graphs (using Dijkstra's & BFS) 19) Topological Sorting of Directed Acyclic Graphs (DAGs) 20) Finding Articulation Points & Bridges in Undirected Graphs 21) Finding Strongly Connected Components in Directed Graphs using Tarjan's Algorithm 22) Checking If An Undirected Graph Is Bipartite 23) Extending An Iterator 24) Union-find (Disjoint-set) 25) Minimum Spanning Tree (Kruskal's Algorithm) 26) Sliding Window Technique 27) String Searching Using Rabin-Karp 28) Fenwick Tree (Binary Indexed Tree) 29) Dynamic Programming 30) Traveling Salesman Problem

What is this series about? What are the goals?

Leveling up my knowledge of algorithms, data structures, and system design. The goal is to become a badass.

What is the format? How will you achieve this?

Right now the plan is as follows:

  1. Do some prep work to learn basic algorithms and data structures. I will be mostly following Heapclub's (a now closed interview prep company) curriculum (curriculum here). The goal is to know all of this like the back of my hand. If I have time I will also do the maths section

  2. After the prep work I am going to follow a similar approach to the one outlined here. I will use Leetcode.

  3. To understand more about Operating Systems, Networking, & Systems in general I will use the following resources:

  4. At the same time, or perhaps at the conclusion of the above steps, I will be watching all the system design videos from the following YouTube channels: Tech Dummies - Narendra L, Success in Tech, Tushar Roy's System Design Playlist, & Gaurav Sen's System Design Playlist

  5. To get even more System Design knowledge, I will be reading the book Designing Data-Intensive Applications. I will try to read this book twice.

  6. To solidify design patterns knowledge, I will use the content from Source Making's Design Patterns.

  7. (Optional) There is the possibility I will read + complete all the relevant sections of CTCI. Specifically, these sections are: Math & Logic Puzzles, Object-Oriented Design, System Design & Scalability, Testing, Java, Databases, Threads & Locks.

  8. (Also optional) SQL resources:

  9. Other resources I will be consulting:

Curriculum that might not exist on Heapclub, but that I have come across in forums/articles/books that could be useful to learn (if time permits). Here is list of topics that seem important (in perceived order of priority):

  • Know common problems: Fibonacci, Valid/balanced parenthesis, palindrome/anagrams of strings, Traveling Sales Person, Knapsack Problem, Longest Common Subsequence (using dynamic programming, bottom-up with a matrix).
  • Disjoint-Set/Union-Find
  • Sliding Window
  • Rabin-Karp
  • Binary Indexed Tree (Fenwick Tree)
  • Bipartite graphs (Checking if a graph is bipartite)
  • Iterators and associated problems (Flatten a nested list iterator, design a skip iterator, merge K sorted iterators)
  • Minimum Spanning Trees
  • Fibonacci Heap and it's guarantees
  • Either KMP or Z Algorithm (choose one)
  • Segment Tree
  • Suffix Tree (without worrying about compression + understand what Ukkonen's algorithm is) &/or Suffix Array
  • Line Sweep (geometry related, problems: Rectangle Intersection & The Skyline problem)

Allotted time for this project: 12-18 months.

Who are you?

Bootcamp grad with 5.5 years Software Engineering experience. I have done some basic algo/ds stuff in the past, but not much - and I've forgotten almost all of it. I'm terrible at maths, and I suck at recursion.

(Please note that I previously linked to this blog post & this other post - which appears to have taken the content directly from Heapclub whilst removing vital information.)

CS Level Up Series (30 Part Series)

1) CS Level Up Series Introduction 2) Dynamic Arrays 3 ... 28 3) Linked Lists 4) Stacks 5) Queues 6) Hash Tables 7) Binary Search Trees 8) Binary Heaps 9) Priority Queues 10) Graphs 11) Tries 12) Binary & Bit Manipulation 13) Common Sorting Algorithms 14) Searching Algorithms 15) Permutations, Combinations, & Subsets 16) NP-Complete & Fibonacci Heap 17) Detecting Graph Cycles With Depth-First Search 18) Finding Shortest Paths In Graphs (using Dijkstra's & BFS) 19) Topological Sorting of Directed Acyclic Graphs (DAGs) 20) Finding Articulation Points & Bridges in Undirected Graphs 21) Finding Strongly Connected Components in Directed Graphs using Tarjan's Algorithm 22) Checking If An Undirected Graph Is Bipartite 23) Extending An Iterator 24) Union-find (Disjoint-set) 25) Minimum Spanning Tree (Kruskal's Algorithm) 26) Sliding Window Technique 27) String Searching Using Rabin-Karp 28) Fenwick Tree (Binary Indexed Tree) 29) Dynamic Programming 30) Traveling Salesman Problem

Posted on Oct 31 '19 by:

Discussion

markdown guide