Algorithms are the soul of computing. Algorithmic thinking, unlike the very young electronic machinery it brings alive, is rooted in ancient mathematics. It can be roughly described as creating "recipes" (well defined sequences of computational steps) for getting "things" (computational problems specifying an input-output relation) "successfully" (correctly) "done" (in finite steps and time). This course introduces basic methods for the design and analysis of efficient algorithms emphasizing methods useful in practice
Course Prerequisites: ·
Basics of Data Structure
Discrete Mathematics - sets, functions, relations; Recurrence Relation, Substitution Method Boolean logic
Course Objectives: This course (BCS401) will enable students to:
To learn the methods for analyzing algorithms and evaluating their performance.
To demonstrate the efficiency of algorithms using asymptotic notations..
To solve problems using various algorithm design methods, including brute force, greedy, divide and conquer, decrease and conquer, transform and conquer, dynamic programming, backtracking, and branch and bound.
Choose the appropriate data structure and algorithm design method for a specified application
To learn the concepts of P and NP complexity classes.
Course Outcomes: The student will be able to :
Apply asymptotic notations and mathematical techniques to analyze the time and space complexity of algorithms.
Apply brute force, decrease-and-conquer, and divide-and-conquer strategies to design and analyze algorithms.
Analyze and implement transform-and-conquer techniques and space-time tradeoff strategies for efficient problem solving.
Design and evaluate solutions using Dynamic Programming and Greedy strategies for optimization problems.
Analyze computational complexity classes and design solutions using backtracking, branch-and-bound, and approximation algorithms for NP-Hard problems.