Oggetto:
Oggetto:

Problem Solving Avanzato

Oggetto:

Advanced Problem Solving

Oggetto:

Anno accademico 2025/2026

Codice attività didattica
INF0401
Docenti
Elvio Gilberto Amparore (Docente)
Giorgio Audrito (Docente)
Corso di studio
[008707] Laurea in Informatica
Anno
3° anno
Periodo
Secondo semestre
Tipologia
A scelta dello studente
Crediti/Valenza
3 CFU - Numero di ore - Number of hours: 24 (lezioni/theory)
SSD attività didattica
INFO-01/A - Informatica
Erogazione
Tradizionale
Lingua
Italiano
Frequenza
Obbligatoria
Tipologia esame
Scritto
Tipologia unità didattica
corso
Prerequisiti

È fortemente consigliato aver già seguito (anche senza aver concluso l'esame) l'insegnamento di Algoritmi e Strutture Dati.


It is strongly recommended to have already followed (even without having completed the exam) the course on Algorithms and Data Structures.
Oggetto:

Sommario insegnamento

Oggetto:

Avvisi

Regole di comportamento durante gli esami Informazioni per studenti con DSA o Disabilità: servizi di Ateneo e supporto per sostenere gli esami
Oggetto:

Obiettivi formativi

Gli obiettivi di questo insegnamento fanno parte degli Obiettivi formativi specifici del CdS in Informatica (L31), in particolare in riferimento all'area dell'informatica di base. Nel dettaglio, gli obiettivi sono:

  1. Acquisire la padronanza di linguaggi di programmazione e pattern di coding adatti al rapido sviluppo di algoritmi efficienti, nonché nella capacità di selezionare velocemente l’algoritmo giusto per una data situazione.
  2. Introdurre tecniche algoritmiche avanzate.
  3. Sviluppare la capacità di lavorare in squadra per risolvere problemi algoritmici, e a comunicare in modo efficace. Il corso segue un format tipicamente utilizzato in gare di programmazione o durante le fasi di recruiting in aziende ICT di alto profilo.

The objectives of this course are part of the specific educational objectives of the Course in Computer Science (L31), in particular in reference to the area of ​​basic computer science. In detail, the objectives are:

  1. Mastering programming languages and coding patterns suitable for the rapid development of efficient algorithms, as well as the ability to quickly select the right algorithm for a given situation.
  2. Introducing advanced algorithmic techniques.
  3. Developing the ability to work in teams to solve algorithmic problems and to communicate effectively. The course follows a format typically used in programming competitions or during the recruiting phases of high-profile ICT companies.
Oggetto:

Risultati dell'apprendimento attesi

CONOSCENZA E CAPACITÀ DI COMPRENSIONE

Conoscere algoritmi e strutture dati utili per la programmazione ad alte performance. Saper comprendere e interpretare un problema algoritmico per avviare una rapida progettazione e realizzazione della soluzione.

CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE

Capacità di utilizzare in maniera adeguata gli algoritmi e le strutture dati necessarie per risolvere problemi di programmazione non banali e con alte performance. Saper applicare tecniche avanzate di programmazione per ridurre la complessità in tempo e memoria, e realizzare soluzioni efficienti.

AUTONOMIA DI GIUDIZIO

Capacità di autovalutazione e stima della complessità algoritmica di una soluzione, sfruttando anche il supporto di strumenti come piattaforme online di valutazione su use-case difficili e/o su grandi moli di dati.

ABILITÀ COMUNICATIVE

Capacità di comunicare idee e soluzioni per problemi algoritmici, applicate in particolare al lavoro di squadra, utilizzando un linguaggio scientifico adeguato ed efficace.

CAPACITÀ DI APPRENDIMENTO

Acquisizione di capacità autonome di apprendimento, tramite identificazione di risorse e materiali rilevanti, incluse piattaforme di valutazione del codice, e definizione di obiettivi chiari nella progettazione e analisi di algoritmi avanzati.

KNOWLEDGE AND UNDERSTANDING

Understand algorithms and data structures useful for high-performance programming. Be able to comprehend and interpret an algorithmic problem to initiate rapid design and implementation of the solution.

ABILITY TO APPLY KNOWLEDGE AND UNDERSTANDING

Ability to appropriately use the necessary algorithms and data structures to solve non-trivial programming problems with high performance. Be able to apply advanced programming techniques to reduce time and memory complexity, and implement efficient solutions.

INDEPENDENT JUDGMENT

Ability to self-evaluate and estimate the algorithmic complexity of a solution, also using tools like online platforms for evaluation on challenging use-cases and/or large datasets.

COMMUNICATION SKILLS

Ability to communicate ideas and solutions to algorithmic problems, particularly applied to teamwork, using adequate and effective scientific language.

LEARNING ABILITY

Acquisition of autonomous learning skills by identifying relevant resources and materials, including code evaluation platforms, and defining clear objectives in the design and analysis of advanced algorithms.

Oggetto:

Programma

  1. Introduzione alla programmazione ad alte performance e competitiva: come affrontare problemi algoritmici con limiti di tempo e di memoria.
  2. Problemi che si possono risolvere tramite libreria standard di C++.
  3. Problemi con soluzione greedy, ottimizzazione e finestre scorrevoli.
    Capire quando una soluzione greedy è sufficiente per risolvere il problema.
  4. Ricorsione esaustiva, backtracking e strategie per ridurre lo spazio da esplorare.
  5. Catalogo di strategie risolutive e programmazione dinamica.
  6. Algoritmi base su grafi, visite e cammini.
  7. Alberi minimi ricoprenti e struttura dati Union-Find.
  8. Ordinamento topologico e algoritmi su DAG.
  9. Strutture dati per operazioni su intervalli: somme prefisse, range tree.

  1. Introduction to high-performance and competitive programming: how to tackle algorithmic problems with time and memory constraints.
  2. Problems that can be solved using the C++ standard library.
  3. Problems with greedy solutions, optimization, and sliding windows. Understanding when a greedy solution is sufficient to solve a problem.
  4. Exhaustive recursion, backtracking, and strategies to reduce the search space.
  5. Catalog of problem-solving strategies and dynamic programming.
  6. Basic graph algorithms, traversals, and paths.
  7. Minimum spanning trees and the Union-Find data structure.
  8. Topological sorting and algorithms on Directed Acyclic Graphs (DAGs).
  9. Data structures for interval operations: prefix sums, range trees.
Oggetto:

Modalità di insegnamento

Il corso si articola in 12 moduli da 2 ore ciascuno. È richiesta la frequenza di almeno il 75% dei moduli al fine di poter accedere all'esame. Il completamento degli esercizi proposti per modulo (anche effettuati in maniera asincrona, senza la presenza alla lezione) è considerato come equivalente alla frequenza.

Ogni modulo affronta un argomento alternando parti teoriche e di esercitazione:

  • Le parti teoriche sono effettuate come lezioni frontali con il supporto di lucidi e altro materiale di approfondimento. Le nozioni teoriche vengono declinate in particolare riferimento a dei problemi presentati, e a come possono essere applicate ad essi.
  • Le esercitazioni tematiche si svolgeranno preferibilmente a squadre, esponendo un insieme di problemi che gli studenti devono analizzare, trovando soluzioni efficienti e determinandone la complessità e potenziali problematiche, ed infine sviluppando codice efficiente.

The course is divided into 12 modules of 2 hours each. Attendance of at least 75% of the modules is required in order to be able to take the exam. Completing the exercises proposed for each module (even if done asynchronously, without being present at the lesson) is considered equivalent to attendance.

Each module addresses a topic, alternating theoretical and practical parts:

  • The theoretical parts are delivered through lectures supported by slides and other in-depth materials. The theoretical concepts are specifically tailored to address presented problems and how these concepts can be applied to them.
  • Thematic exercises will preferably be carried out in teams, presenting a set of problems that students must analyze, finding efficient solutions and determining their complexity and potential issues, and finally developing efficient code.
Oggetto:

Modalità di verifica dell'apprendimento

L’esame si terrà sotto forma di prova di programmazione al computer. La prova prevederà la risoluzione di 4 problemi algoritmici in un tempo massimo di 4 ore. Ogni problema prevede un punteggio parziale a seconda della complessità della soluzione prodotta. I problemi saranno proposti in lingua inglese, come nelle competizioni internazionali esistenti.

Nei mesi da settembre a marzo saranno proposti 5 appelli di esame o esonero, basati su una selezione di problemi delle competizioni nazionali delle olimpiadi di informatica individuali e a squadre. Uno specifico appello (in generale il primo nel mese di Settembre) sarà anche valevole come selezione della squadra che rappresenterà l’Università di Torino alla competizione internazionale SWERC dell’International Collegiate Programming Contest.

A metà del corso verrà inoltre proposta una prova intermedia di esonero, sostitutiva della prima metà della prova di esame.

The exam will be conducted as a computer-based programming test. The test will involve solving 4 algorithmic problems within a maximum time of 4 hours. Each problem will have a partial score based on the complexity of the solution produced. The problems will be presented in English, as is common in existing international competitions.

From September to March, there will be 5 exam or exemption sessions, based on a selection of problems from national competitions of individual and team informatics Olympiads. A specific session (generally the first in September) will also serve as the selection for the team that will represent the University of Turin at the SWERC international competition of the International Collegiate Programming Contest.

Halfway through the course, an intermediate exemption test will also be proposed, replacing the first half of the exam.

Testi consigliati e bibliografia



Oggetto:
Libro
Titolo:  
Competitive Programming 4: The Lower Bound of Programming Contest in the 2020s. Book 1
Anno pubblicazione:  
2018
Editore:  
Lulu Press, Incorporated
Autore:  
Steven Halim, Felix Halim, Suhendry Effendy
ISBN  
Obbligatorio:  
No


Oggetto:
Libro
Titolo:  
Competitive Programming 4: The Lower Bound of Programming Contest in the 2020s. Book 2
Anno pubblicazione:  
2020
Editore:  
Lulu Press, Incorporated
Autore:  
Steven Halim, Felix Halim, Suhendry Effendy
ISBN  
Obbligatorio:  
No
Oggetto:

Tutto il materiale di studio necessario verrà caricato nella pagina moodle del corso durante le lezioni, con riferimenti anche ad alcune attività accessibili online. Tutto il materiale sarà fornito in digitale e sarà possibile consultarlo online e, se si desidera, scaricarlo e stamparlo. I testi di riferimento sono suggerimenti di supporto, non strettamente necessari per seguire il corso.

All necessary study materials will be uploaded to the course Moodle page during the lectures, with references to some activities accessible online. All materials will be provided digitally, allowing students to consult them online and, if desired, download and print them. The reference texts are suggested as supplementary support and are not strictly necessary for following the course.



Oggetto:
Ultimo aggiornamento: 19/05/2025 15:14
Location: https://laurea.informatica.unito.it/robots.html
Non cliccare qui!