Programma algoritmi e Strutture Dati con Laboratorio Anno Accademico 2010-2011 CFU: 15 Prof. Pinotti e Prof. Bicocchi May 17, 2011 • Complessità asintotica, crescita delle funzioni, upper e lower bounds • Equazioni di Ricorrenza: – Metodo della sostituzione – Albero della ricorsione – Stima e dimostrazione per induzione della soluzione – Soluzione di casi particolarei ∗ Equazioni di ricorrenza omogenee di ordine d a coefficiente costante ∗ Equazioni di ricorrenza a partizioni ∗ Teorema dell’Esperto • Algoritmi di ordinamento (correttezza, complessità nel caso pessimo, ottimalità): – Insertion Sort (complessità anche nel caso medio) – Quicksort – Mergesort – Heapsort – Radix Sort – Bucket Sort – Counting Sort • Tecniche per provare la complessità intrinseca di un problema • Strutture Dati – Array e Liste con puntatori – Heap binari: coda di prorità (inserzione, cancellazione, cambio del valore della chiave, costruzione) – Head d-ary – Alberi binari di ricerca – Tabelle Hash 1 • Tecnica di programmazione divide-et-impera – Ricerca binaria e varianti – Numero di inversioni in un array – Algoritmo di Strassen per la moltiplicazione fra matrici • Mediana e statistiche d’ordine: complessità lineare nel caso pessimo • Grafi – Rappresentazione con matrice delle adiacenze e liste delle adiacenze: impatto sulla complessità in tempo e spazio sulle operazioni elementari – Visite in profondità: complessità e proprietà – Visite in larghezza: complessità e proprietà – Componenti connesse di un grafo non orientato, Ordinamento topologico, Componenti fortemente connesse di un grafo orientato, Punti di articolazioni • Algoritmi avanzati sui grafi: – Cammini minimi da sorgente singola: ∗ Algoritmo di Dijkstra: complessità, varie implementazioni, proprietà ∗ Algoritmo di Bellman-Ford: complessità, proprietà – Cammini minimi fra tutte le coppie: ∗ Metodo analogo alla moltiplicazione fra matrici: complessità, varie implementazioni, proprietà ∗ Algoritmo di Floyd-Warshall: complessità, proprietà ∗ Algoritmo di Johnson: complessità, proprietà – Albero di copertura di costo minimo: ∗ Algoritmo di Kruskal: complessità, proprietà e varianti ∗ Algoritmo di Prim: complessità, proprietà ∗ Albero di copertura con il secondo costo minimo • Tecnica di programmazione dinamica (esempi con calcolo del valore della funzione obiettivo, calcolo della soluzione ottima, analisi della complessità in tempo e spazio): – Il problema dello zaino intero – Il problema delle catene di montaggio – Il problema della moltiplicazione di una sequenza di matrici • Tecnica di programmazione greedy (esempi con calcolo del valore della funzione obiettivo, calcolo della soluzione ottima, analisi della complessità in tempo e spazio): – Il problema dello zaino frazionario – Il problema dei codici di Huffman – Il problema della selezione delle attività Testo di riferimento: T. Cormen, C. Leiserson, R. Rivest, C. Stein, Introduzione agli algoritmi e strutture dati 3/ed, Mac-Graw Hill 2