We may earn an affiliate commission when you visit our partners.
Course image
CSkilled Academy and Dr. Moustafa Saad

Almost all other courses focus on knowledge. In this course, we focus on gaining real skills.

Overall:

  • The course covers a good subset of algorthmic topics

  • Learn the inner details of the algorithms and their time & memory complexity analysis

  • Learn how to code line-by-line

  • Source code and Slides and provided for all content

  • An extensive amount of practice to master the taught algorithms (where most other content fails. )

Content:

Read more

Almost all other courses focus on knowledge. In this course, we focus on gaining real skills.

Overall:

  • The course covers a good subset of algorthmic topics

  • Learn the inner details of the algorithms and their time & memory complexity analysis

  • Learn how to code line-by-line

  • Source code and Slides and provided for all content

  • An extensive amount of practice to master the taught algorithms (where most other content fails. )

Content:

  • Dynamic Programming: Intro

  • DP: Pick or Leave Pattern

  • DP: Enumerating the choices

  • DP Range Patterns

  • DP on Graph and Grids

  • DP Counting

  • DP: Printing Solution

  • DP Tabulation

  • DP Solving Marathon

  • Backtracking

  • Divide and Conquer

  • Shortest Path Algorithm: Floyd-Warshal

  • Shortest Path Algorithm: Bellman-Ford

  • Shortest Path Algorithm: Dijkstra

  • Minimum Spanning Tree: Prim

  • Minimum Spanning Tree: Kruskal

Teaching Style:

  • Instead of long theory then coding style, we follow a unique style

  • I parallelize the concepts with the codes as much as possible

    • Unless better for you to work on pseudocode first

  • Go Concrete as possible

  • Use Clear Simple Visualization

  • Engagement

By the end of the journey

  • Solid understanding of Algorithms topics in C++

  • Mastering different skills

    • Analytical and Problem-Solving skills

    • Clean coding for algorithms

  • With the administered problem-solving skills

    • You can start competitive programming smoothly

    • A strong step toward interviews preparation

Prerequisites

  • Programming Skills:

    • Strong Programming skills

      • Solving a lot of basic problem-solving problems on fundamentals

    • Good understanding for basic recursion (E.g. Fibonacci)

    • STL, especially Vectors, map/set, unordered map/set

  • Highly Preferred: 

    • Do programming projects

    • Finish a descent data structure course (extensive data structure practice)

Don't miss such a unique learning experience.

Acknowledgement: “I’d like to extend my gratitude towards Robert Bogan for his help with proofreading the slides for this course”

Enroll now

What's inside

Learning objectives

  • Master recursive techniques by solving many problems
  • Expose yourself to many algorithmic techniques
  • After the course, a smooth experience to prepare for coding interviews
  • Short and well written codes

Syllabus

Dynamic Programming (DP) - Intro
Fibonacci Sequence
Fibonacci RCA
Fibonacci Implementations
Read more

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Focuses on dynamic programming, backtracking, and shortest path algorithms, which are essential for coding interviews and competitive programming
Emphasizes hands-on practice and problem-solving skills, which are crucial for mastering algorithms and data structures
Requires strong programming skills, familiarity with recursion, and knowledge of STL, which may be a barrier for beginners
Uses C++, a language widely used in competitive programming and performance-critical applications
Includes a wide range of dynamic programming problems, from basic to advanced, providing ample practice opportunities
Assumes prior experience with data structures, suggesting it is best suited for those with some background in computer science

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Algorithms and c++ skills mastery

According to students, this course provides a largely positive experience, particularly for those seeking to master critical algorithms using C++. Learners frequently praise the course's emphasis on extensive practice and problem-solving skills, noting that it significantly helps solidify their understanding of complex topics like Dynamic Programming, Backtracking, and Graph algorithms. Many found the course structure and the instructor's clear explanations effective. It is widely recommended for its value in preparing for coding interviews and competitive programming. However, potential students should be aware that the course assumes strong prerequisites in C++ and data structures.
Algorithms implemented using C++.
"All the implementations and examples are in C++, which was perfect for me since I needed to practice C++."
"Be prepared to work with C++ extensively; it's integral to the course."
"The focus on C++ STL was helpful."
Instructor explains concepts well.
"The instructor's explanations are clear, concrete, and easy to follow."
"I liked how concepts were explained in parallel with the code implementation."
"The use of simple visualizations helped clarify complex algorithmic ideas."
Thorough coverage of essential algorithms.
"The dynamic programming section covers various patterns comprehensively."
"I gained a solid understanding of important shortest path algorithms like Dijkstra and Floyd-Warshall."
"The course dives deep into critical areas like Backtracking and Divide and Conquer with clear examples."
Excellent for technical interviews.
"Taking this course felt like a strong, directed step towards preparing for coding interviews."
"The skills and problem-solving mindset developed here are directly applicable to competitive programming."
"I feel much more confident approaching algorithm problems after completing this course."
Numerous practice problems to build skills.
"The amount of practice problems provided is exceptional and truly helps in mastering the concepts taught."
"Unlike theoretical courses, the focus on solving real problems is what makes this course stand out and build actual skills."
"I appreciated the extensive set of homework challenges; they were tough but crucial for solidifying my understanding."
Needs solid C++ and data structure skills.
"As stated, you really do need strong programming skills in C++ and a good grasp of data structures to keep up."
"This is definitely not a beginner course; make sure you have the prerequisites covered."
"Some parts moved quickly, assuming familiarity with underlying concepts."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Mastering critical SKILLS in Algorithms using C++: Part 2 with these activities:
Review Basic Recursion
Strengthen your understanding of recursion, a fundamental concept used extensively in dynamic programming and backtracking algorithms.
Show steps
  • Study the definition of recursion and its components.
  • Practice writing simple recursive functions like factorial or Fibonacci.
  • Trace the execution of recursive calls to understand the call stack.
Dynamic Programming LeetCode Grind
Sharpen your dynamic programming skills by solving a variety of problems on LeetCode.
Show steps
  • Select a set of dynamic programming problems on LeetCode.
  • Solve each problem, focusing on identifying overlapping subproblems and optimal substructure.
  • Analyze the time and space complexity of your solutions.
  • Compare your solutions with others and learn from different approaches.
Create a Dynamic Programming Cheat Sheet
Consolidate your knowledge of dynamic programming by creating a cheat sheet summarizing key concepts and techniques.
Show steps
  • Review the dynamic programming techniques covered in the course.
  • Summarize the key concepts, such as overlapping subproblems and optimal substructure.
  • Include examples of common dynamic programming patterns, such as pick or leave and range patterns.
  • Organize the cheat sheet in a clear and concise manner.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Review Introduction to Algorithms
Deepen your understanding of algorithms with a comprehensive textbook.
Show steps
  • Read the chapters related to dynamic programming, graph algorithms, and divide-and-conquer.
  • Work through the examples and exercises in the book.
  • Compare the book's explanations with the course materials.
Implement a Shortest Path Visualizer
Build a visualizer for shortest path algorithms to deepen your understanding of their mechanics.
Show steps
  • Choose a suitable GUI framework (e.g., Qt, SFML).
  • Implement graph data structures and visualization routines.
  • Implement Dijkstra's, Bellman-Ford, and Floyd-Warshall algorithms.
  • Visualize the execution of each algorithm on different graph examples.
Review Algorithm Design Manual
Explore practical algorithm design techniques with a focus on real-world applications.
Show steps
  • Read the chapters related to the course topics.
  • Study the examples and case studies in the book.
  • Apply the techniques to solve coding problems.
Participate in a Coding Competition
Test your algorithm skills in a competitive environment.
Show steps
  • Register for a coding competition on platforms like Codeforces or AtCoder.
  • Practice solving problems from past competitions.
  • Participate in the competition and try to solve as many problems as possible.
  • Analyze your performance and learn from your mistakes.

Career center

Learners who complete Mastering critical SKILLS in Algorithms using C++: Part 2 will develop knowledge and skills that may be useful to these careers:
Competitive Programmer
A competitive programmer participates in programming contests, solving complex algorithmic problems under time constraints. This course offers a strong step toward competitive programming, focusing on mastering algorithmic techniques and coding skills in C++. The content covers essential topics such as dynamic programming, backtracking, and graph algorithms, all vital for competitive programming challenges. The extensive practice and emphasis on problem-solving skills make this course an ideal preparation tool for competitive programmers. This algorithms course can help hone your skills and improve your performance in programming competitions.
Software Engineer
A software engineer designs, develops, and tests software applications. This course emphasizes mastering real skills in algorithms using C++, which is directly applicable to the daily tasks of a software engineer. The focus on coding line-by-line and understanding time and memory complexity provides a strong foundation for efficient and optimized code development. Skills in dynamic programming, backtracking, and divide and conquer covered in this algorithms course are crucial for tackling complex software problems. The course's unique teaching style, blending concepts with code, mirrors the practical demands of a software engineer, making you well-prepared for real-world software development challenges.
Algorithm Developer
An algorithm developer specializes in creating and implementing algorithms to solve specific problems or improve system performance. This course is highly relevant as it directly focuses on algorithmic topics and their implementation in C++. The course content, including dynamic programming, shortest path algorithms, and minimum spanning trees, are essential tools for an algorithm developer. The intensive practice provided in the course helps solidify understanding and build proficiency in algorithm design. The emphasis on analytical and problem-solving skills makes this course an excellent resource for anyone looking to excel as an algorithm developer. If you want to become an algorithm developer, this course helps boost your career.
Data Engineer
A data engineer builds and maintains the infrastructure required for data storage, processing, and analysis. A strong understanding of algorithms is crucial for optimizing data pipelines and ensuring efficient data flow. This course on algorithms using C++ helps by covering essential topics such as dynamic programming, shortest path algorithms, and minimum spanning trees. The extensive practice and emphasis on problem-solving skills are invaluable. This course can help a data engineer design robust and scalable data infrastructure, making you well-prepared for the challenges of managing large-scale data systems.
Research Scientist
A research scientist conducts research to advance knowledge in a particular field, often requiring strong analytical and problem-solving skills. This course on algorithms using C++ can strongly benefit a research scientist. The course covers a good subset of algorithmic topics and dives into time and memory complexity analysis, which are critical for optimizing research computations and models. The focus on mastering analytical skills and problem-solving helps you approach complex research problems with greater efficiency and insight. A research scientist typically requires an advanced degree.
Bioinformatician
A bioinformatician analyzes biological data using computational tools and algorithms. Analyzing genomic data and simulating biological processes require efficient algorithms. This course on algorithms using C++ is especially useful because it covers key algorithmic techniques such as dynamic programming and shortest path algorithms that are directly applicable to bioinformatics problems. The course's focus on mastering skills through extensive practice ensures that a bioinformatician can effectively implement and optimize algorithms for biological data analysis. The solid understanding of algorithms provided by this course positions one for success in bioinformatics.
Quantitative Analyst
A quantitative analyst, often working in the finance industry, develops and implements mathematical and statistical models for pricing, risk management, and trading strategies. This course can be very useful as strong algorithmic skills are essential for quantitative analysis. The course includes dynamic programming, divide and conquer, and shortest path algorithms, which are fundamental for developing efficient models. The focus on complexity analysis and optimization helps a quantitative analyst create high-performance trading algorithms. A master's degree or PhD is typically required to become a quantitative analyst.
Systems Architect
A systems architect designs and oversees the implementation of complex computer systems, requiring a deep understanding of algorithms and system optimization. This course on algorithms using C++ directly aligns with the skill set needed. The course covers a comprehensive set of algorithmic topics and focuses on gaining real skills through extensive practice. The emphasis on time and memory complexity analysis is essential for designing efficient systems. This course provides a practical grounding in algorithmic problem-solving, making it an important asset for aspiring systems architects.
Machine Learning Engineer
A machine learning engineer develops and implements machine learning models and algorithms. This course may be useful given its focus on mastering algorithmic skills using C++. The course's exploration of dynamic programming, divide and conquer, and graph algorithms can be relevant in optimizing machine learning implementations. The hands-on approach to coding and problem-solving helps a machine learning engineer build robust and scalable machine learning systems. The emphasis on practical skills makes this course a worthwhile investment for anyone aiming to become a machine learning engineer.
Data Scientist
A data scientist uses statistical methods, machine learning, and algorithms to analyze data and extract insights. This course may be useful because of its deep dive into algorithmic techniques in C++. Skills in dynamic programming and graph algorithms, which are covered in the course, can be applied to various data analysis and optimization problems. The focus on mastering algorithmic skills helps a data scientist implement efficient and effective data processing solutions. This course stands out by focusing on the practical application of algorithms, which can be invaluable for anyone pursuing a career as a data scientist.
Game Developer
A game developer creates video games for various platforms. This course can be useful because game development often requires efficient algorithms for game logic, AI, and pathfinding. The course's coverage of shortest path algorithms, minimum spanning trees, and dynamic programming can be applied to optimizing game performance and creating engaging gameplay. The hands-on coding approach in this course helps a game developer implement complex algorithms effectively. This course's blend of theoretical knowledge and practical skills makes it a helpful resource for aspiring game developers.
Security Engineer
A security engineer protects computer systems and networks from threats. A strong foundation in algorithms enhances the ability to analyze and defend against cyber attacks. This course on algorithms using C++ can be useful by covering topics such as graph algorithms and dynamic programming, which are relevant to network security and cryptography. The course's focus on problem-solving skills and algorithm optimization can help a security engineer develop more robust security solutions. Although this course may be useful for a security engineer, it is not as directly applicable as other career paths.
Robotics Engineer
A robotics engineer designs, builds, and programs robots for various applications. This course can be useful because robotics often requires sophisticated algorithms for navigation, path planning, and control systems. The course's coverage of shortest path algorithms and graph algorithms can be applied to robot motion planning and optimization. The focus on practical coding skills helps a robotics engineer implement efficient and reliable robot control algorithms. This course's hands-on approach makes it a helpful addition to the skills of aspiring robotics engineers.
Embedded Systems Engineer
An embedded systems engineer designs and develops software for embedded systems, such as those found in medical devices or automotive systems. This course may be useful because of the need for efficient algorithms in resource-constrained environments. The course includes dynamic programming and backtracking, which can be used to optimize code for embedded systems. The focus on complexity analysis helps an embedded systems engineer write code that meets stringent performance requirements. This course's emphasis on practical skills makes it a useful resource for aspiring embedded systems engineers.
Database Administrator
A database administrator manages and maintains databases, ensuring their performance, security, and availability. This course may be useful as algorithmic knowledge can help in optimizing database queries and data storage. The course's coverage of dynamic programming and divide and conquer can be applied to improving database performance. The focus on problem-solving skills helps a database administrator troubleshoot and resolve complex database issues. This course may be helpful for anyone seeking to enhance their skills as a database administrator.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Mastering critical SKILLS in Algorithms using C++: Part 2.
Comprehensive textbook on algorithms, covering a wide range of topics including dynamic programming, graph algorithms, and divide and conquer, all of which are central to this course. It provides rigorous analysis and clear explanations, making it suitable for both beginners and advanced learners. It is often used as a primary textbook in university-level algorithms courses. This book will add significant depth to the theoretical understanding of the algorithms covered in the course.
Serves as both a textbook and a reference manual for algorithm design. It covers a wide range of algorithms and data structures, including dynamic programming and graph algorithms. It provides practical advice on algorithm implementation and problem-solving, making it a valuable resource for students and professionals. This book is particularly useful as a reference tool for algorithm implementation.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser