| | | corso | | | | |
Competitive programming and contests
Codice: | 645AA | Crediti: | 6 | Semestre: | 1 | Sigla: | CPC | |
|
Settore disciplinare: | INF/01 - Informatica |
Docente
Rossano Venturini
Tel. 0502213139Ultima versione disponibile: programma da confermare per l’a.a. 2017/2018
English Description
The goal of the course is to improve programming and problem solving skills of the students by facing them with difficult problems and by presenting the techniques that help their reasoning in the implementation of correct and efficient solutions. The importance of these skills has been recognized by the most important software companies worldwide, which evaluate candidates in their job interviews mostly by the ability in addressing such difficult problems. A natural goal is to involve the students in the intellectual pleasure of programming and problem solving, also preparing them for the most important international online contests, such as TopCoder, HackerRank, CodeChef, Facebook Hacker Cup, Google Code Jam and so on, for internships in most important companies and their interviews. A desirable side-effect of the course could be to organize and prepare teams of students for the ACM International Collegiate Programming Contests. The course will give the opportunity to uniform students' background in algorithms and programming in view of the subsequent courses.
- An official language for contests: C++ and its standard template library
- Efficient code: programming, benchmarking and profiling
- Real-world applications of sorting
- Basic data structures: priority queues, search trees, and hash maps
- Advanced data structures: union-find, Fenwick tree, interval trees, range-minima query
- Basic string algorithms
- Basic graph algorithms
- Fast optimization with dynamic programming
- Computational geometry
Each topic of the above syllabus will be covered by
- offering a quick recap of the related concepts from an introductory class on algorithms;
- programming and engineering fast software solutions for real-life computational problems;
- learning how to recognize their applicability through contests and experimentation.