Course Description

Dynamic of Programming is a powerful algorithmic technique used in computer science and mathematics to solve complex optimization problems. It involves breaking down a problem into smaller subproblems and solving each subproblem only once, storing the solution to each subproblem in a table for later use. This approach reduces the computational time required to solve the larger problem and is often used when the problem can be divided into overlapping subproblems. The course "Dynamic Programming" introduces students to the fundamental concepts of dynamic programming, including memoization, recursion, and the various types of subproblems. Students will learn how to apply dynamic programming to a wide range of problems, such as finding the shortest path in a graph, maximizing the profit in a stock market, and minimizing the cost of a transportation network. The course is designed for students with a strong foundation in programming and mathematics, and covers advanced topics such as the Bellman-Ford algorithm, the Floyd-Warshall algorithm, and the Knapsack problem. In addition, students will learn how to implement dynamic programming algorithms in different programming languages such as Python, Java, and C++. Throughout the course, students will work on a series of programming assignments and projects that apply dynamic programming techniques to real-world problems. They will also learn how to analyze the time and space complexity of their algorithms to ensure their solutions are optimal. By the end of the course, students will have a deep understanding of the fundamental principles, and will be able to apply this powerful technique to a wide range of optimization problems. They will also have gained valuable experience in programming, algorithm design, and analysis that will be useful in their future studies and careers. Author: WilliamFiset