In this course, you will explore the fundamental design techniques used for efficient algorithmic problem-solving and software development. Methods that yield algorithms that are both provably correct and efficient, the efficiency of algorithms to provide a basis for deciding which algorithm is best for the job, limits on the power of computers, and the theory of NP-completeness will also be covered. Students will be introduced to methods whose correctness or performance is not guaranteed.
Algorithmics is the systematic study of the design and analysis of algorithms. It deals with such fundamental questions as: How do we go about designing an algorithm for a given problem? Is the algorithm correct? Does it perform efficiently? Is it the best possible for the job? Is there any good algorithm for this problem? It has been said that algorithms form the soul of computer science. Certainly, the study of algorithms is a fundamental activity of a computer scientist for society.
The skills developed in this course are particularly useful for those wishing to have a career involving efficient programming, problem-solving and data science. The class is considered essential for all students interested in continuing to graduate programmes in computer science, as it covers ACM curriculum core topics deemed required within the area of algorithms for every computer science undergraduate major.