Course:
Course Program:
This course is intended to introduce the student to the main paradigms of algorithm analysis, methods and mathematical tools used for analyzing the performance of algorithms, the theory of parallel algorithms, as well as known sequential and parallel algorithmic solutions to frequently encountered problems.
The theory of complexity analysis, basic techniques that are commonly used in analyzing the performance, basic classes of algorithms (comparison-based, recursive, divide-and-conquer, dynamic, greedy, numerical, graph), and lower bound theory will be covered. Parallel architectures and parallel algorithms will be studied in detail. Meanwhile, mathematical tools like interpolation, master theorem, etc. will be introduced. The last part of the course will be the study of the topic of probabilistic algorithms, which is a recent but rapidly growing area of research.
Textbook:
Reference Books:
·A Guide to Algorithm Design: Paradigms, Methods, and Complexity Analysis, Anne Benoit, Yves Robert, Frederic Vivien, CRC Press, 2013
·Algorithms and Complexity, Herbert S.Wilf, CRC Press, 2nd ed., 2002
·Complexity Theory : Exploring the Limits of Efficient Algorithms, Ingo Wegener, Springer, 2005
·Foundations Of Algorithms, Richard Neapolitan, Jones and Bartlett Learning, 5th ed., 2014
·Introduction to the Design and Analysis of Algorithms, Anany Levitin, Addison Wesley, 2003
·The Algorithm Design Manual, Steven S. Skiena, Springer, 2nd ed., 2008