27 Settembre 2017 
-  Introduzione al corso:
 iscrizioni, modalità di esame.  
- Presentazione del libro di testo
 (CLRS). 
 -  Obiettivi del corso: paradigmi
 algoritmici e algoritmi per problemi notevoli. 
 - Ricapitolazione:
 prerequisiti da ripassare (App. A e B e Capp. 1, 2 e 3 del CLRS). 
 -  Definizione di problema, istanza, 
 taglia di un'istanza e algoritmo che risolve un problema.(Controlla il  Materiale On-line ).  
 -  Complessità in tempo di un algoritmo su
una singola istanza. Definizione della complessità al caso migliore,
medio e peggiore. Analisi di un algoritmo: correttezza e complessità.
   
  
28 Settembre 2017 
 
  Il paradigma Divide-and-Conquer. 
 
- Proprietà strutturale dei problemi
risolvibili con Divide-and-Conquer. 
 -  Algoritmo generale per il Divide-and-Conquer.
 -  Albero delle Chiamate di un algoritmo Divide-and-Conquer.
 -  Fase di generazione top-down e di risoluzione bottom-up.
 -  Analisi della correttezza di un algoritmo Divide-and-Conquer con l'induzione  (Sez. 4.1, 4.3-4.5 del CLRS)
 -  Specifica dell'algoritmo MAX per calcolare il massimo di un array di interi.
  
  
29 Settembre 2017 
-  Analisi della correttezza di MAX basata sull'induzione.
 -  Analisi della complessità di un algoritmo Divide-and-Conquer: ricorrenze. 
 -  Applicazione a MAX della tecnica dell'unfolding.
 -  Verifica di una ricorrenza e cenni alla tecnica del guess.
 -  Introduzione all'induzione parametrica.
  
  
4 Ottobre 2017 
  
    -  Induzione parametrica: applicazione a MAX.
    
 -  Limiti dell'induzione parametrica.
    
 -  Esercitazione in classe su induzione parametrica
  
 -  Analisi dell'albero della ricorrenza.
  
  
5 Ottobre 2017 
Formula generale per la risoluzione di 
un'ampia classe di ricorrenze  Divide-and-Conquer. (Controlla il  
Materiale On-line ) 
 
-  Definizione delle funzioni s(n), f(n), w(n).
 -  Funzioni iterate: definizione e  proprietà.
 -  Informazioni associate ai nodi dell'albero della ricorrenza.
 -  La formula chiusa.
 -  Esempi di applicazione.
  
  
6 Ottobre 2017 
-  Il Master Theorem: enunciato
 -  Il Master Theorem: prova. (Si veda anche CLRS: Sez. 4.6)
 -  Il Master Theorem: casi di inapplicabilità
  
  
11 Ottobre 2017 
 
-  Il Master Theorem: la condizione di regolarità per polinomi.
 -  L'estensione a valori arbitrari del parametro
  
     
Algoritmi per aritmetica intera (Controlla il  Materiale On-line ) 
-  Istanze e modello di costo.
 -  Operazioni lineari: somma e sottrazione. 
  
 
  
  
  12 Ottobre 2017 
  
 -  Prodotto per una potenza della base. 
 -  Algoritimo di moltiplicazione elementare quadratico. 
 -  Algoritmo ricorsivo di moltiplicazione quadratico.  
 -  Algoritmo di Karatsuba: implementazione e analisi.
  
Algoritmi per operazioni tra matrici
-  Istanze e modello di costo.
 -  Algoritmi iterativi di somma e sottrazione.
  
 
  
13 Ottobre 2017 
-  Algoritmo di moltiplicazione iterativo
 -  Algoritmo ricorsivo cubico.
 -  L'algoritmo di Strassen. Definizione dei sottoprodotti. Correttezza e
studio della complessità asintotica. (CLRS, Sez. 4.2) 
 -  Risoluzione esatta della ricorrenza associata al'algoritmo di Strassen. 
Confronto con l'algoritmo basato sulla definizione.
  
  
18 Ottobre 2017 
  
-  Ibridizzazione di due algoritmi. Applicazione a Strassen. 
Ricorrenza parametrica per la determinazione del punto di 
transizione tra i due algoritmi. (Controlla il  Materiale On-line ). 
  
 I polinomi e la FFT  (CLRS, Cap. 30)
-  Rappresentazione per coefficienti e rappresentazione per punti. 
 -  Conversioni. Valutazione: regola di Horner. 
  
 
  
19 Ottobre 2017 
-  Interpolazione: matrice di Vandermonde. Formula di
Lagrange. Approccio al calcolo della formula di Lagrange (controlla
il  Materiale On-line ). 
 - Somma e prodotto nella rappresentazione per coefficienti. L'operatore di
convoluzione lineare. 
 - Somma e prodotto nella rappresentazione per punti. Rappresentazione
estesa. 
 - La Discrete Fourier
Transform (DFT): definizione. 
 - DFT come operazione di
valutazione. DFT inversa. La matrice di Fourier.
  
  
20 Ottobre 2017 
-  Il teorema di convoluzione lineare
 - Le radici n-sime dell'unità. Definizione e
  proprietà di gruppo.
 -  Lemma di cancellazione.
 -  Lemma di dimezzamento.
 -  Lemma di somma. 
  
  
25 Ottobre 2017 
- Proprietà di sottostruttura per il calcolo della DFT: valutazione di un
polinomio di grado n tramite valutazioni di due polinomi di
grado n/2. 
 - FFT: pseudocodice, correttezza e complessità
 -  Inversa della matrice di Fourier. La
  trasformata inversa di Fourier: espressione analitica.
 -   Approccio al calcolo della trasformata inversa: valutazione
  su potenze negative della radice principale n-sima dell'unita'.
 -  Calcolo della trasformata inversa tramite la FFT.
  
  
26 Ottobre 2017 
 
-  L'algoritmo di Cooley-Tukey per trasformate di ordine n = p x q (controlla
il  Materiale On-line ).
 -  Derivazione dell'algoritmo di FFT per n potenza di due
  dall'algoritmo di Cooley-Tukey.
 -  Esercizio: Uso della decomposizione di Cooley-Tukey nel trasformare vettori (n,k)-sparsi.
 -  Definizione di convoluzione ciclica.
 -  Teorema di convoluzione ciclica (enunciato).
 -  Relazioni tra convoluzione ciclica e convoluzione lineare.
  
  
27 Ottobre 2017 
  Esercitazioni sulla FFT: 
-  Tecnica di Bluestein per il calcolo di trasformate di ordine non potenza di due.      
 -  Prodotto di matrici circolanti.
 -  Risoluzione di un sistema lineare definito da una matrice circolante.
  
 
  
 
2 Novembre 2017 
 La Programmazione Dinamica (CLRS, Cap. 15)
-  Critica al paradigma
 divide-and-conquer: problema della mancanza di memoria nella
 risoluzione di sottoistanze ripetute. I numeri di Fibonacci:
  algoritmo divide-and-conquer esponenziale.
 -  Utilizzo di tabelle e risoluzione
 bottom-up. I numeri di  Fibonacci: algoritmo iterativo lineare.  
 -  La memoizzazione di un algoritmo divide-and-conquer: sviluppo e
 analisi. I numeri di  Fibonacci: algoritmo memoizzato.  
 Analisi basata sull'albero delle chiamate.  
 -  I problemi di ottimizzazione: definizione algebrica.
 -  Caratteristiche generali dei problemi risolvibili con programmazione
dinamica: sottostruttura ottima, sottoproblemi ripetuti, spazio dei
sottoproblemi ristretto.
  
 
  
3 Novembre 2017 
 
-  Paradigma generale per lo sviluppo di un algoritmo di programmazione
dinamica: proprietà di sottostruttura ottima, 
scrittura della ricorrenza sui costi, risoluzione bottom-up e informazione
addizionale.
 -  Il problema della Matrix Chain Multiplication (MCM). 
Definizione, applicazioni, approccio enumerativo esponenziale.
 -  MCM: Proprietà di sottostruttura ottima.
 -  MCM: Ricorrenza sui costi e informazione addizionale.
  
  
8 Novembre 2017 
 
-  MCM: Algoritmo divide-and-conquer esponenziale.  
 -  MCM: Approccio iterativo bottom-up: codifica e analisi.
 -  MCM: Codice memoizzato: codifica e analisi.
  
  
 9 Novembre 2017 
 -  MCM: Algoritmo di moltiplicazione a catena ottimo
 
 -  Stringhe: alfabeto, sottostringhe, prefissi, suffissi,
 sottosequenze. 
 -  Il problema della Longest Common
 Subsequence (LCS). Proprietà di sottostruttura
  ottima: intuizione e enunciato.
 -  LCS: Proprietà di sottostruttura ottima: prova.    
  
  
10 Novembre 2017 
 
-  LCS: Ricorrenza e sottoproblemi ripetuti, (CLRS, pagg. 350-355).
 -  LCS: Informazione addizionale.
 -  LCS: Codice iterativo bottom-up e stampa della LCS. 
 -  LCS: Codice memoizzato e analisi
 -  La Longest Increasing Subsequence (LIS) e la
tecnica del rafforzamento dei sottoproblemi. (Controlla il 
Materiale On-line ) 
 
 
  
15 Novembre 2017 
 
-   LIS: proprietà di sottostruttura ottima
 -   LIS: informazione addizionale, codice iterativo e
stampa della LIS.  
  
  Esercitazioni sulla Programmazione Dinamica: 
    
-  Ottenere la LIS utilizzando l'algoritmo per la LCS
 - La Longest Palindrome Substring di una stringa: proprietà di sottostruttura,  ricorrenza, informazione addizionale.
  
 
  
16 Novembre 2017 
  Esercitazioni sulla Programmazione Dinamica: 
    
-  La Longest Palindrome Substring di una stringa: codice bottom-up e risparmio di spazio.
 -  La Longest Palindrome Subsequence di una stringa:  proprietà di sottostruttura,  ricorrenza, informazione addizionale e codice bottom-up.
 -  La Divisione a catena di costo massimo: proprietà di sottostruttura,  ricorrenza, informazione addizionale e codice bottom-up.
  
  
 
    
17 Novembre 2017 
 Il paradigma Greedy (CLRS, Cap. 16)
-  Critica alla programmazione dinamica e 
idea dell'approccio greedy: scelta greedy e risoluzione top-down
di un solo sottoproblema. 
 -  Selezione delle attività: Algoritmo ricorsivo top-down lineare e eliminazione della
tail recursion: algoritmo iterativo lineare. (Si studi anche l'approccio alternativo di
CLRS, pp.415-418. Errata per la seconda edizione del CLRS scarica le  
 pagine corrette ).
 -  Selezione delle attività: enunciato e prova delle proprietà di scelta greedy
  
 
  
22 Novembre 2017 
 
-  Selezione delle attività: enunciato e prova delle proprietà di  di sottostruttura ottima
 -  Esercizio: Scelte greedy non corrette per la selezione delle attività
 -  Introduzione alla compressione dei dati: codici a lunghezza
fissa, codici a lunghezza variabile, codici liberi da prefissi
(prefix codes).  
 -  Rappresentazione ad albero ( trie) dei codici prefissi.
 -  Compressione come problema di ottimizzazione su trie. 
  
  
23 Novembre 2017 
 
-  Teorema: un codice prefisso ottimo corrisponde a un albero pieno.
 -  Codici di Huffman: idea generale e algoritmo.
 -  Codici di Huffman: Proprietà di scelta greedy.
 -  Codici di Huffman: Proprietà  sottostruttura ottima.
  
  
24 Novembre  2017 
-  Valutazione della didattica in presenza
  
 Esercitazioni sul Paradigma Greedy
  
-  Copertura minima di punti con intervalli unitari: algoritmo greedy e analisi.     
 -  Determinazione del (2,1)-packing ottimo.
  
  
 30  Novembre 2017 
 NP Completezza (CLRS, Cap. 34)
 
-  Classi di problemi:
problemi indecidibili, intrinsecamente esponenziali, intrattabili, polinomiali. 
 - Problemi astratti e problemi decisionali. Riduzione da problemi di
ottimizzazione a problemi decisionali. Esempio: SHORTEST UNWEIGHTED PATH.
 -  Il problema dell'encoding: problemi astratti e problemi concreti. 
  
  
1 Dicembre 2017 
-  Encoding ragionevoli.
 -   Linguaggi formali. Definizioni e operazioni. Problemi concreti e
linguaggi associati. 
 -  Decisione di un linguaggio in tempo polinomiale: la classe P: definizione.
 -  Verificabilità in tempo polinomiale: introduzione.
 -  Algoritmo di verifica per HAMILTON. 
 -  Verificabilità in tempo polinomiale: definizione.
 -  La classe NP. Teorema: P è un sottoinsieme di NP.
  
  
6 Dicembre 2017 
-  Riducibilità in tempo polinomiale.
 -  Caratteristiche delle funzioni di riduzione. 
 -  Teorema: Se L1 < L2 e L2 è in P, allora L1 è in P.
 -  Le classi NPH e NPC. 			 
  
  
7 Dicembre 2017 
-  Corollario: se L e' sia in NPC che in  P, allora P=NP. 
 -  Il problema BC-SAT. Definizione.
 -  Il teorema di Cook: 1) Algoritmo di verifica polinomiale per BC-SAT. 
  2) Riduzione di ogni linguaggio in NP a BC-SAT (idea).
 -  Il problema FORMULA-SAT. Definizione. Riduzione non polinomiale da BC-SAT.
  
  
13 Dicembre 2017 
-  Riduzione polinomiale da BC-SAT a FORMULA-SAT.
 -  Il problema 3CNF-SAT. Riduzione da BC-SAT.
  
  
14 Dicembre 2017 
-  Il problema CLIQUE. Definizione e riduzione da 3CNF-SAT.
 -  Il problema VERTEX-COVER. Definizione e riduzione da CLIQUE.
 -  Il problema INDEPENDENT-SET. Definizione e riduzione da CLIQUE.
  
  
15 Dicembre 2017 
-  Il problema SUBSET SUM. Definizione e riduzione da 3CNF-SAT.
  
   Esercitazioni su NP completezza
     
  
20 Dicembre 2017 
 Esercitazioni su NP completezza
 
  |