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