Advanced Algorithms Course Released on Boot.dev
Sorry it took so long for me to get this one out! Data Structures and Algorithms 2 was just released, and I’m excited to let you all get your hands on it, even if you’re just auditing it for free! The more advanced material takes quite a bit longer to produce, I wanted to triple-check to make sure I got everything correct and that I’ve presented it in a way that makes it easy to understand.
The course, like its prerequisite, Data Structures and Algorithms, is written in Python, so most of the algorithms you write will be Python classes. Aside from the Python coding exercises that you can complete in your browser, multiple-choice questions help ensure you’ve digested the reading material. Sometimes the more math-intensive stuff simply can’t be learned easily through code, so you’ve got to do a bit of reading.
While it’s not completely necessary to take my Data Structures and Algorithms course first, I would recommend it, even if you’ve learned this stuff before. It doesn’t cost any extra, and the refresher will really help. I won’t rehash all the Big-O complexity stuff here, because I’m assuming you’re already familiar with it. In this course, we focus on implementing some of the more advanced algorithms that you would learn in a CS undergraduate degree and learn how you can recognize when algorithms of this sort will help you in your future career.
What’s included?
There are four modules.
Module 1 - Graph Theory
In this module, we have a brief refresher on graph data structures, and implement some basic traversal algorithms like breadth and depth-first search. We also cover different types of graphs, like complete and directed graphs, and how they can be represented in code.
Module 2 - Advanced Searches
In this module, we really round out our experience with graphs. We learn about greedy algorithms, and how they can help us write faster code. We also implement a priority queue so that we can use it as we do a deep dive on Dijkstra’s algorithm. Finally, we finished the module by writing an A* search that can find its way quickly through a muddy map - similar to what you’d need to write as a game developer.
Module 3 - Dynamic Programming
In this module, we shift gears, and learn about how memoization and tabulation techniques can be used to optimize various algorithms by trading memory for speed. We re-write the classic Fibonacci function using dynamic programming, as well as the super useful edit-distance algorithm. Edit distance is used in the real world to calculate the similarity in spellings between words, just like how spell-checkers work.
Module 4 - Linear Programming
In the final module, we shift course yet again to focus more on the mathematical side of things. Linear programming is a technique used to solve linear systems of equations, specifically optimization problems. We build from scratch a Simplex solver in Python and use it to calculate the exact number of cookies and cakes a baker should produce to maximize the profit in her shop.
Related Articles
Top 8 Benefits of Functional Programming
Feb 25, 2021 by Lane Wagner - Boot.dev co-founder and backend engineer
Functional programming is a way to write code where programs are created strictly through functions. Functional programming has gained quite a bit of traction in recent years among the development community, mostly because of the benefits it provides.
What Is Dry Code, and Is It Always A Good Thing?
Jan 25, 2021 by Lane Wagner - Boot.dev co-founder and backend engineer
“Don’t repeat yourself”, or “DRY” for short, is a somewhat controversial principle of software development. It aims to make code cleaner, which is to say less buggy and easier to work with. DRY purports to accomplish this by reducing repetition in your codebase and replacing that duplicate code with abstractions like functions, classes, and methods.
Writing a Binary Search Tree in Python with Examples
Jan 12, 2021 by Lane Wagner - Boot.dev co-founder and backend engineer
What is a binary search tree? A binary search tree, or BST for short, is a tree where each node is a value greater than all of its left child nodes and less than all of its right child nodes. Read on for an implementation of a binary search tree in Python from scratch!
Building a Linked List in Python with Examples
Jan 11, 2021 by Lane Wagner - Boot.dev co-founder and backend engineer
A linked list is a linear data structure where elements are not stored next to each other in memory. Unlike and array, elements in a linked list use pointers or references to each other to keep the list intact.