Programma algoritmi e Strutture Dati con Laboratorio

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