The independent study provides a self-contained introduction to recent advances in automated synthesis of computing systems. We will focus both on classical application of automated synthesis to software engineering and on relatively recent advances in algorithmic synthesis of hardware systems. The course will enable students to be prepared for conducting their own research into automated synthesis of computing systems.
This course explores algorithms for problem solving in the real world. Emphasis is provided on extending known results by employing computational thinking to solve new problems. Formal techniques for proving correctness and analyzing the performance of algorithms will also be discussed. Hardness results, approximation and randomized algorithms will also be briefly surveyed in the course. The course will emphasize on parallel thinking and implementation of algorithms on existing and emerging parallel computer architectures.