Emphasis is placed on fundamental algorithms and advanced methods of algorithmic design, analysis, and implementation. Techniques to be covered include amortization, randomization, fingerprinting, word-level parallelism, bit scaling, dynamic programming, network flow, linear programming, fixed-parameter algorithms, and approximation algorithms. Domains include string algorithms, network optimization, parallel algorithms, computational geometry, online algorithms, external memory, cache, and streaming algorithms, and data structures.
Sorry, it took so long for me to get this one out! Advanced Algorithms are very complex if you are not aware of the fundamentals of DS-ALGO, The more advanced material takes quite a bit longer to produce.
While it’s not completely necessary to take Big-O Data Structures and Big-O Algorithms 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. we will 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 the gears 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 any programming language that you know and use it to calculate the exact number of cookies and cakes a baker should produce in order to maximize the profit in her shop.
This is all about advanced algorithms.