Vai al contenuto principale
Oggetto:

Problem Solving Avanzato

Oggetto:

Advanced Problem Solving

Oggetto:

Anno accademico 2024/2025

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: 424 (lezioni/theory)
SSD attività didattica
INF/01 - informatica
Erogazione
Tradizionale
Lingua
Italiano
Frequenza
Facoltativa
Tipologia esame
Scritto
Oggetto:

Sommario insegnamento

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. 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 svolgono 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, each lasting 2 hours. Each module addresses a topic by alternating between 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.

The practical exercises involve presenting a set of problems that students must analyze, find efficient solutions for, determine their complexity and potential issues, and finally develop 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.

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.

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: 10/07/2024 10:23
Location: https://laurea.informatica.unito.it/robots.html
Non cliccare qui!