focuses on the design and analysis of algorithms. The course covers methods for evaluating the time and space complexity of algorithms, including average-case and worst-case analysis. Topics include models of computation, recurrence relations, and algorithmic techniques such as divide-and-conquer, greedy algorithms, and dynamic programming. Students also learn to express algorithm efficiency using asymptotic notation and analyze algorithmic correctness through mathematical proofs.