Algoritimi e Strutture Dati modulo 2 Moreno Marzolla Dip. di Informatica—Scienza e Ingegneria Università di Bologna [email protected] Algoritmi e Strutture Dati 2 Presentiamoci ● Modulo 2 (II sem.) – – – ● Orario delle lezioni – – ● Moreno Marzolla [email protected] http://www.moreno.marzolla.name/ Giovedì ore 14:00—16:00, aula M1 Mineralogia Venerdì ore 11:30—14:30, aula Ercolani 1 Ricevimento – Previo appuntamento via mail Algoritmi e Strutture Dati 3 “Netiquette” ossia, le “buone maniere” nell'era di Internet ● Usate esclusivamente l'indirizzo ufficiale @studio.unibo.it – ● ● ● ● Ogni tanto controllate la posta in ingresso Indicate sempre l'oggetto (subject) del messaggio Indicate nome, cognome e numero di matricola nel corpo del messaggio Specificate che il vostro messaggio è relativo al corso di Algoritmi e Strutture Dati Ricordarsi che la posta elettronica è un mezzo di comunicazione asincrono – – Non sempre sono in grado di rispondere immediatamente Non date per scontato che io legga la posta a mezzanotte Algoritmi e Strutture Dati 4 Sito web del modulo 2 ● http://www.moreno.marzolla.name/teaching/ASD – – – – Avvisi Lucidi delle lezioni Dispensa di esercizi svolti Modalità d'esame Algoritmi e Strutture Dati 5 Bibliografia ● Testo adottato – ● Alan Bertossi, Alberto Montresor, Algoritmi e strutture di dati Terza Edizione, 2014, Città Studi, ISBN: 9788825173956 Testi di consultazione – – Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano, Algoritmi e strutture dati 2/ed, McGraw-Hill ISBN: 9788838664687, Giugno 2008 Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein, Introduzione agli algoritmi e strutture dati 2/ed, McGraw-Hill, ISBN: 9788838662515, Maggio 2005 Algoritmi e Strutture Dati 6 Programma del modulo 2 ● ● ● ● Strutture Merge-Find Tecniche Algoritmiche – Divide et impera – Algoritmi greedy – Programmazione dinamica Algoritmi su grafi – Visita – Alberi di copertura (spanning trees) – Cammini minimi – ... Cenni alla teoria della calcolabilità Algoritmi e Strutture Dati 7 Prerequisiti ● Programmazione Internet + Lab. di prog. Internet – – ● Algoritmi e Strutture Dati ≠ Programmazione In questo corso non si impara a programmare, perché dovete già essere in grado di farlo Nozioni di base di algebra e analisi matematica – Sommatorie, polinomi, ordini di grandezza delle funzioni, disequazioni Algoritmi e Strutture Dati 8 Scopo del corso ● Contenuto – – – ● Una panoramica di problemi noti e loro soluzioni “Elenco” di algoritmi e strutture dati “standard” Come valutare l'efficienza di un algoritmi Metodo – – Algoritmi e Strutture Dati Principi e tecniche per risolvere problemi algoritmici Come risolvere nuovi problemi, applicando soluzioni note o “inventando” varianti alle soluzioni note 9 Scopo del corso 10 Modalità d'esame ● ● (Già descritte dal prof. Donatiello) Prova scritta su tutti gli argomenti del corso – – – ● 6 appelli d'esame: 3 nella sessione estiva, 1 nella sessione autunnale, 2 nella sessione invernale E' consentito usare libri e appunti Non c'è orale oppure due progetti di programmazione + discussioni – – – Un progetto è già stato assegnato Il secondo progetto verrà assegnato alla fine del modulo 2 Possibilità di recuperare uno dei progetti, sostenendo lo scritto sugli argomenti del modulo mancante Algoritmi e Strutture Dati 11 Osservazioni importanti ● I progetti non rappresentano un modo per superare l'esame senza studiare la teoria – ● La conoscenza della teoria verrà verificata durante la discussione; chi dimostra preparazione insufficiente non supera la prova. Impegno richiesto – 12 CFU = 12 x 25 = 300 ore di studio ● ● ~ 100 ore di lezione ~ 200 ore di studio individuale Algoritmi e Strutture Dati 12 Come superare l'esame ● Seguire le lezioni – ● ● Studiare sul libro Esercitarsi il più possibile – – ● Se qualcosa non è chiaro, fate domande, oppure venite a ricevimento Gli algoritmi non sono uno sport che si pratica da spettatori Sfruttate la dispensa di esercizi svolti Fare pratica in Java – anche se non intendete svolgere i progetti! “Se ascolto dimentico; se vedo ricordo; se faccio capisco.” Algoritmi e Strutture Dati Confucio13 Esercizi di ripasso Algoritmi e Strutture Dati 14 Vero o falso? 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 1325 n2 + 12n + 1 = (n3) 76 n3 = O(n3) n2 log n = O(n2) 3n = O(2n) 2n = O(2n/2) 2n+100 = O(2n) log n = O(n) n = O(n log n) n2 = O(n log n) log( n2 ) = (log n) n(n+1) / 2 = O(n) Algoritmi e Strutture Dati 15 Vero o falso? 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 1325 n2 + 12n + 1 = (n3) FALSO 76 n3 = O(n3) VERO n2 log n = O(n2) FALSO 3n = O(2n) FALSO 2n = O(2n/2) FALSO 2n+100 = O(2n) VERO log n = O(n) VERO n = O(n log n) VERO n2 = O(n log n) FALSO log( n2 ) = (log n) VERO n(n+1) / 2 = O(n) Algoritmi e StruttureFALSO Dati 16 Esercizio ● Determinare il costo asintotico dell'algoritmo seguente – supponiamo n intero positivo integer AlgA(integer n) if ( n ≤ 1 ) then return 2*n; else integer a ← 2; for integer i ← 1 to n/2 do a ← a + 2 * i; endfor return AlgA( n/2 ) + AlgA( n/2 ) + a; endif Algoritmi e Strutture Dati 17 Esercizio ● Determinare il costo asintotico dell'algoritmo seguente – supponiamo n intero positivo AlgB( integer n ) integer i ← 1; while i ≤ n do i ← 2 * i; endwhile Algoritmi e Strutture Dati 18 Strutture Dati ● Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList Inserimento in testa Inserimento in coda (add) Inserimento dopo un elemento di posizione/riferimento dati Cancellazione di un elemento di posizione/riferimento dati Accesso al k-esimo elemento Algoritmi e Strutture Dati 19 Strutture Dati ● Che differenza c'è tra LinkedList e ArrayList Java? Inserimento in testa Inserimento in coda (add) Inserimento dopo un elemento di posizione/riferimento dati Cancellazione di un elemento di posizione/riferimento dati Accesso al k-esimo elemento LinkedList O(1) O(1) ArrayList O(n) O(1) amm. O(1) O(n) O(1) O(n) O(k) O(1) Dalla documentazione di java.util.ArrayList The add operation runs in amortized constant time, that is, adding n elements requires O(n) time. All of the other operations run in linear time (roughly speaking). 20 Algoritmi e Strutture Dati Min-Heap ● ● Consideriamo il min-heap mostrato in figura Mostrare la struttura dello heap dopo ciascuna delle seguenti operazioni – – – – – Rimozione minimo Rimozione minimo Inserimento 5 Inserimento 21 Rimozione minimo 7 12 25 10 18 14 26 31 Algoritmi e Strutture Dati 21 Caso ottimo / caso pessimo ● ● Consideriamo un albero binario di ricerca, che non viene mantenuto bilanciato, con n nodi Quale è il costo dell'operazione di ricerca – – nel caso pessimo? nel caso ottimo? Algoritmi e Strutture Dati 22