Course Objectives
1) To develop students’ understanding of the fundamental concepts and principles of
computer algorithms.
2) To equip students with skills for analyzing the time and space complexity of algorithms.
3) To develop the ability to formulate and solve recurrence relations using substitution,
recursion tree, and Master Theorem methods.
4) To enable students to apply appropriate algorithm design techniques, including divide
and-conquer, greedy, dynamic programming, backtracking, and branch-and-bound.
5) To develop students’ ability to design, implement, and evaluate sorting, searching, and
graph algorithms.
6) To enable students to select and apply efficient algorithms and data structures to solve
computational and real-world problems.
Course Learning Outcomes
By the end of this course unit the student should be able to;
1) Explain the fundamental concepts, principles, and characteristics of computer algorithms and
algorithm analysis.
2) Analyze the time and space complexity of algorithms using asymptotic notations, recurrence
relations, recursion trees, and the Master Theorem.
3) Apply appropriate algorithm design techniques, including divide-and-conquer, greedy algorithms,
dynamic programming, backtracking, and branch-and-bound.
4) Design, implement, and evaluate sorting, searching, and graph algorithms for solving
computational problems efficiently.
5) Analyze computational complexity and distinguish between P, NP, NP-complete, and NP-hard
problems, including the use of approximation algorithms.
6) Select and justify appropriate algorithms and data structures for real-world problems based on
correctness, efficiency, scalability, and application requirements.
- Teacher: Ibrahim Moge