22
Algoritimi e Strutture Dati Algoritimi e Strutture Dati modulo 2 modulo 2 Moreno Marzolla Dip. di Informatica—Scienza e Ingegneria Università di Bologna [email protected]

Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

  • Upload
    vudat

  • View
    238

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritimi e Strutture DatiAlgoritimi e Strutture Datimodulo 2modulo 2

Moreno MarzollaDip. di Informatica—Scienza e IngegneriaUniversità di Bologna

[email protected]

Page 2: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 2

Page 3: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 3

Presentiamoci

● Modulo 2 (II sem.)– Moreno Marzolla– [email protected] – http://www.moreno.marzolla.name/

● Orario delle lezioni– Giovedì ore 14:00—16:00, aula M1 Mineralogia– Venerdì ore 11:30—14:30, aula Ercolani 1

● Ricevimento– Previo appuntamento via mail

Page 4: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 4

“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

Page 5: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 5

Sito web del modulo 2

● http://www.moreno.marzolla.name/teaching/ASD– Avvisi– Lucidi delle lezioni– Dispensa di esercizi svolti– Modalità d'esame

Page 6: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 6

● 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

Bibliografia

Page 7: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 7

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à

Page 8: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 8

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

Page 9: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 9

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– Principi e tecniche per

risolvere problemi algoritmici

– Come risolvere nuovi problemi, applicando soluzioni note o “inventando” varianti alle soluzioni note

Page 10: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

10

Scopo del corso

Page 11: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 11

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

Page 12: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 12

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

Page 13: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 13

Come superare l'esame

● Seguire le lezioni– Se qualcosa non è chiaro, fate domande, oppure venite a

ricevimento● Studiare sul libro● Esercitarsi il più possibile

– 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.”

Confucio

Page 14: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 14

Esercizi di ripasso

Page 15: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 15

Vero o falso?

1. 1325 n2 + 12n + 1 = (n3)

2. 76 n3 = O(n3)

3. n2 log n = O(n2)

4. 3n = O(2n)

5. 2n = O(2n/2)

6. 2n+100 = O(2n)7. log n = O(n)8. n = O(n log n)

9. n2 = O(n log n)

10. log( n2 ) = (log n)

11. n(n+1) / 2 = O(n)

Page 16: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 16

Vero o falso?

1. 1325 n2 + 12n + 1 = (n3) FALSO

2. 76 n3 = O(n3) VERO

3. n2 log n = O(n2) FALSO

4. 3n = O(2n) FALSO

5. 2n = O(2n/2) FALSO

6. 2n+100 = O(2n) VERO7. log n = O(n) VERO8. n = O(n log n) VERO

9. n2 = O(n log n) FALSO

10. log( n2 ) = (log n) VERO

11. n(n+1) / 2 = O(n) FALSO

Page 17: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 17

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;endforreturn AlgA( n/2 ) + AlgA( n/2 ) + a;

endif

Page 18: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 18

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

Page 19: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 19

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

Page 20: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 20

Strutture Dati

● Che differenza c'è tra LinkedList e ArrayList Java?

LinkedList ArrayList

Inserimento in testa O(1) O(n)

Inserimento in coda (add) O(1) O(1) amm.

Inserimento dopo un elemento di posizione/riferimento dati

O(1) O(n)

Cancellazione di un elemento di posizione/riferimento dati

O(1) O(n)

Accesso al k-esimo elemento 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).

Page 21: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 21

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 10

25 18 14 26

31

Page 22: Algoritimi e Strutture Dati modulo 2 - moreno.marzolla.name · Algoritmi e Strutture Dati 20 Strutture Dati Che differenza c'è tra LinkedList e ArrayList Java? LinkedList ArrayList

Algoritmi e Strutture Dati 22

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?