### Course Description

This is a short (21 hours) course of 6/7 Lectures. The goals of this course are i) to survey the foundations of the design and analysis of algorithms; ii) to provide a practical understanding of complexity theory and algorithmics; iii) to provide an in-depth understanding of selected problems at theforefront of research explorations in the design and analysis of algorithms.

Most of the excercises and examples are drawn from problems related to networking and distributed systems, such as peer-to-peer systems. More traditional cases are also covered in the Lectures.

#### Prerequisites

Basic knowledge of elementary data structures, sorting, and basic terminology involving graphs (including the concepts of depth-first search and breadth-first search). Some of these are reviewed in the course. The lectures and homework may involve the analysis of algorithms at a fairly mathematical level: students are expected to be comfortable reading and writing proofs.

#### Comment on the lecture notes:

The material presented during class is used by students as a complementary text book. Lecture notes and slides are mainly based on the material presented in the excellent book from J. Kleinberg, E. Tardos. In many cases, the slides report examples and text of their book. I also used some slides (especially those with animations) from [Prof. Kevin Wayne].