Prima parte del programma — Prima prova parziale
Introduzione
- Cos’è un algoritmo
- Come descrivere gli algoritmi (pseudocodice)
- Come valutare gli algoritmi
- Algoritmi discussi a lezione:
- Ricerca del minimo
- Ricerca dicotomica
Analisi degli algoritmi
- Modelli di calcolo
- Funzioni di costo
- Complessità algoritmi vs complessità problemi
- Limiti asintotici superiori e inferiori
- Analisi di ricorrenze
- Metodo di sostituzione
- Metodo dell’albero di ricorrenza
- Metodo dell’esperto
- Algoritmi discussi a lezione:
- Moltiplicazione di Karatsuba
- Selection Sort
- Insertion Sort
- Merge Sort
Strutture dati astratte
- Sequenza
- Insiemi
- Dizionari
- Alberi e grafi
- Algoritmi discussi a lezione:
- Lista bidirezionale con/senza sentinella
- Pila basata su vettore
- Coda basata su vettore circolare
Analisi ammortizzata
- Metodo dell’aggregazione
- Metodo dell’ammortamento
- Metodo del potenziale
- Algoritmi discussi a lezione:
- Contatori binari
- Vettori dinamici
Alberi
- Definizioni
- Realizzazioni
- Con vettore dei figli
- Con padre/primo figlio/fratello
- Con vettori dei padri
- Alberi binari
- Algoritmi discussi a lezione:
- Visita in profondità
- Visita in ampiezza
Alberi binari di ricerca
- Alberi binari di ricerca
- Alberi bilanciati di ricerca
- Alberi Red-Black
- Algoritmi discussi a lezione:
- Ricerca, inserimento, cancellazione
- Successore, predecessore
- Minimo, massimo
- Rotazioni in alberi Red-Black
- Inserimento in alberi Red-Black
- Cenni sulla cancellazione in alberi Red-Black
Grafi
- Definizioni
- Realizzazioni
- Liste/vettori di adiacenza
- Matrici di adiacenza
- Visite
- Visita in profondità
- Visita in ampiezza
- Algoritmi basati sulle visite:
- Distanza
- Ordinamento topologico
- Grafi aciclici
- Componenti connesse
- Componenti fortemente connesse
Tabelle hash
- Funzioni hash
- Metodo della moltiplicazione
- Metodo della divisione
- Metodi di scansione
- Scansione interna
- Scansione esterna
- Algoritmi discussi a lezione:
- Tabella hash con scansione interna basata su doppio hashing
Insiemi
- Vettori booleani
- Liste/vettori non ordinati
- Liste/vettori ordinati
- Alberi bilanciati
- Tabelle hash
- Bloom filters
Strutture dati speciali
- Alberi heap
- Code con priorità
- Algoritmi discussi a lezione
- Heapsort
Seconda parte del programma — Seconda prova parziale
Strutture dati speciali
- Insiemi disgiunti
- Algoritmi discussi a lezione
- Insiemi disgiunti basati su euristica sul rango e compressione dei cammini
Strutture dati e progettazione di algoritmi
- Problema dei cammini minimi
- Algoritmi discussi a lezione:
- Algoritmo di Dijkstra
- Algoritmo di Johnson
- Algoritmo di Fredman-Tarjan
- Algoritmo di Bellman-Ford-Moore
Programmazione dinamica
- Zaino 0/1, con varianti
- Sottosequenza comune massimale
- String matching approssimato
- Prodotto di catena di matrici
- Insieme indipendente intervalli pesati
- Cammini minimi fra tutte le coppie
Algoritmi greedy
- Zaino reale
- Insieme indipendente di intervalli
- Problema del resto
- Minimo albero di copertura
- Algoritmo di Kruskal
- Algoritmo di Prim
- Compressione di Huffman
Backtrack
- Enumerazione
- Sottoinsiemi
- Permutazioni
- Problema delle n regine
- Giro di cavallo
- Sudoku
- Inviluppo complesso
- Algoritmi di Jarvis e Graham
Ricerca locale
- Schema generico di ricerca locale
- Reti di flusso
- Ford-Fulkerson
- Edmonds-Karp
Algoritmi probabilistici
- Primalità
- Bloom filters
- Quicksort probabilistico
- Problema della selezione o della mediana
- Soluzione probabilistica
- Soluzione deterministica
Ordinamento
- Limiti inferiori per l’ordinamento
- Counting Sort
- Pigeonhole Sort
- Bucket sort (no 2023/24)
- Stabilità degli algoritmi di ordinamento (no 2023/24)
Solo orale
NP-Completezza
- Definizione
- Riduzione
- Classe P
- Classe NP
- Problemi NP-completi
Soluzioni per problemi intrattabili
- Algoritmi pseudo-polinomiali
- Algoritmi di approssimazione
- Algoritmi branch-&-bound
- Algoritmi euristici
- Algoritmi visti
- Subset sum, pseudopolinomiale
- Partition
- Bin-packing
- Algoritmo approssimato per Delta-TSP
- TSP greedy
- TSP ricerca locale
- TSP branch-&-bound