• please find the syllabus here.

Course goals :

The purpose of this course is to teach the methods of analysis and design of algorithms. In this lesson, students learn how to analyze a problem and find the types of possible algorithms to solve it. Then find algorithmic solutions based on each type, analyze them in terms of computational complexity, and select the best algorithms for a particular engineering application based on the size and input properties of the problem. In this lesson, basic algorithms for Solving practical and common problems will also be provided to students.

Course results :

Students who pass this lesson successfully will be able:

1.Have a general understanding of algorithmic problem solving techniques.
2.Become familiar with NP-complete issues and prove NP-complete a problem.
3.Become familiar with basic graph algorithms.
4.Compute the time complexity of an algorithm.
5.Have an understanding of common and important algorithms and compare their different solutions in terms of complexity and know where to apply each algorithm.
6.Use existing library functions for common algorithms.

List of topics:

1.Recursion  and Backtracking
2.Dynamic programming
3.Greedy Algorithms
4.Amortized Analysis
5.Elementary Graph algorithms
6.Minimum Spanning Trees
7.Single‐Source Shortest paths
8.All‐Pairs Shortest Paths
9.Maximum Flow
10.String Matching
11.Np-Completeness