This is the first PhD-level course on the design and the analysis of
efficient algorithms, with a strong emphasis on theoretical aspects. The
prerequisites are a very basic knowledge of graph theory and
computational complexity, as well as a good understanding of
undergraduate-level courses of algorithms, discrete mathematics, and
It is not necessary to have already taken a graduate-level course on algorithms.
The goal of the course is to give a broad coverage of the main techniques in algorithm design and analysis, so that the course can be useful also for a researcher in a different field. To this purpose, the computational problems tackled are among the most basic problems on strings and graphs, such as pattern matching, vertex cover and max cut.
In fact, anyone that deals with one of the following questions will find the course interesting.
- How can I cope with problems that are provably hard to solve exactly (i.e. are NP-hard)?
- How can I exploit the massive availability of CPUs?
- How can I query efficiently massive texts?
- Parallel algorithms. (PRAM model, prefix sum algorithm) recording
- Parallel algorithm. recording
- Fixed-parameter algorithms. (Vertex cover) recording
- Fixed-parameter algorithms recording
- Approximation algorithms. (Algorithms for Vertex Cover, Max Cut.) recording
- Approximation algorithms 2. (Satisfiability,
Approximation Complexity) recording
- Randomized algorithms. (Karp-Rabin algorithm for
pattern matching), Streaming algorithms. (Heavy Hitters, Count-Min sketch,
Reservoir sampling) recording
- Text indexing (Suffix Tree, Suffix Array, Burrows-Wheeler Transform, Longet Common Prefix Array and Enhanced Suffix Array), May 26, h 14.30
- FM-index and Pattern Matching with FM-index, May 28, h 14.30
- Bi-directional BWT and Positional BWT, June 4, h 14.30