Class Central is learner-supported. When you buy through links on our site, we may earn an affiliate commission.

Coursera

Advanced Algorithms, Dynamic Programming & Graph Algorithms

Packt via Coursera

Overview

Google, IBM & Meta Certificates — All 10,000+ Courses at 40% Off
One annual plan covers every course and certificate on Coursera. 40% off for a limited time.
Get Full Access
This course features Coursera Coach! A smarter way to learn with interactive, real-time conversations that help you test your knowledge, challenge assumptions, and deepen your understanding as you progress through the course. Mastering advanced algorithms is essential for solving complex problems in real-world applications. In this course, you’ll dive deep into critical concepts such as dynamic programming, graph theory, heap operations, and bit manipulation techniques. Each section builds on your knowledge, ensuring a comprehensive understanding that will be indispensable in interviews, competitive programming, and everyday coding tasks. The course begins by introducing heaps, providing hands-on lessons on implementing heaps, inserting and deleting elements, and solving problems like finding the kth largest element in an array. From there, you'll move to dynamic programming, tackling classical problems such as "Climbing Stairs," "Coin Change," and "Longest Common Subsequence," learning the techniques to optimize recursive algorithms with memorization and tabulation. You’ll also explore graph algorithms including BFS, DFS, Dijkstra's, and Bellman-Ford for shortest path solutions, as well as Minimum Spanning Trees with Prim’s Algorithm. Designed for anyone looking to deepen their algorithmic knowledge, this course is suitable for intermediate learners with a basic understanding of data structures. No prior experience with dynamic programming or advanced graph algorithms is required, but a solid grasp of programming basics will be beneficial. By the end of the course, you will be able to efficiently solve complex problems using dynamic programming, implement advanced graph algorithms, and apply heaps to optimize your solutions. You’ll also gain hands-on experience with Leetcode-style problems that are frequently encountered in technical interviews.

Syllabus

  • Heaps
    • In this module, we will explore heap data structures, including their fundamental operations like insertion, deletion, and heapify. We will implement heaps in Java and apply them to real-world problems such as finding the kth largest element and solving the "Last Stone Weight" problem. By the end of this section, you will have hands-on experience solving various heap-based problems.
  • Dynamic Programming Theory + DP Practice Problems (1D + 2D + String DP)
    • In this module, we will delve into dynamic programming (DP) techniques, understanding their theoretical foundation and practical use. We will solve a variety of problems, from simple ones like "Climbing Stairs" to more complex ones such as "Longest Palindromic Substring." By the end, you'll be equipped to apply dynamic programming to tackle a wide range of algorithmic challenges.
  • Bit Manipulation Techniques + Leetcode Practice Problems
    • In this module, we will explore bit manipulation techniques and how they can optimize problem-solving. You'll learn the key bitwise operators and solve practice problems, from finding a single number in an array to dividing integers using bit shifts. By the end of this section, you'll be proficient in using bitwise operations for efficient solutions.
  • Disjoint Set Data Structure - Union Find Algorithms
    • In this module, we will focus on the Disjoint Set (Union-Find) data structure, learning how it helps efficiently solve problems in graph theory. We'll implement Union-Find with optimizations to improve its performance and apply it to problems like cycle detection and finding connected components. This section will give you the tools to work with graph-based problems effectively.
  • Graphs Theory + Graph Practice Problems (BFS/DFS/Shortest Path Algorithm/MST)
    • In this module, we will dive into graph theory, starting with essential concepts like directed vs. undirected graphs and weighted vs. unweighted graphs. You'll learn and implement graph traversal techniques like BFS and DFS, along with optimization algorithms such as Dijkstra’s and Prim’s. By the end of this section, you’ll be able to solve various graph-related problems with confidence.
  • Greedy Algorithms
    • In this module, we will explore the principles of greedy algorithms and their applications in optimization problems. You’ll tackle practice problems like "Best Time to Buy and Sell Stock II" and "Candy," learning how greedy strategies help find the most efficient solutions. By the end of this section, you’ll be able to apply greedy algorithms to real-world optimization challenges.
  • Game Theory
    • In this module, we will explore the fundamentals of game theory, focusing on strategic decision-making in competitive scenarios. You will solve problems such as "Nim’s Game," learning how to use optimal moves to determine the winner. By the end, you will have a solid understanding of game theory and how to apply it to solve problems in competitive environments.
  • Advanced String Matching Algorithms
    • In this module, we will delve into advanced string matching algorithms, focusing on the Knuth-Morris-Pratt (KMP) algorithm. You will learn both brute force and optimized methods for string matching and subsequences. By the end of this section, you’ll be able to solve complex string matching problems using efficient algorithms.
  • String Problems
    • In this module, we will explore various string problems, starting with the "Longest Palindromic Substring." You'll learn how to solve string manipulation problems using dynamic programming and optimize your solutions for better performance. By the end of this section, you'll have the skills to tackle a range of challenging string problems efficiently.
  • Advanced Data Structure - Segment Trees
    • In this module, we will focus on segment trees, an advanced data structure that is essential for solving range queries and updates. You will learn how to build and implement segment trees, answering complex range queries efficiently. By the end of this section, you’ll be capable of using segment trees to optimize a variety of range-based problems.

Taught by

Packt - Course Instructors

Reviews

Start your review of Advanced Algorithms, Dynamic Programming & Graph Algorithms

Never Stop Learning.

Get personalized course recommendations, track subjects and courses with reminders, and more.

Someone learning on their laptop while sitting on the floor.