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).
Algorithm design and analysis provide the theoretical backbone of computer science and are a must in the daily work of the successful programmer. The goal of this course is to provide a solid background in the design and analysis of the major classes of algorithms.
In this course, students will develop ability to articulate processes for solving problems and to implement those processes efficiently within their programming. Students will learn to design algorithms for searching, sorting, and optimization and apply them to answer practical questions.
The expected outcome of this class: Students will be more confident to solve a lot of USACO Bronze level problems, and be able to solve some problems which are equivalent to the silver level from USACO,
Prerequities: Problem Solving by Python or equivalent.