1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: [email protected] URL:...

37
1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: [email protected] URL: www.dis.uniroma1.it/~becchett Ricevimento: Latina: martedì e giovedì, ore 9.00- 9.45 Roma: mercoledì, ore 10-12, Dip. Informatica e Sistemistica, via Salaria 113 II piano, 00198 Roma Testo adottato: R. Sedgewick, Algoritmi in Java, Addison Wesley Ingegneria 2000, via della polveriera 15 (S. Pietro in vincoli), tel. 06 4744169/06 4746609 Testi consigliati: T. Cormen e altri. Introduzione agli algoritmi. Ed. Jackson libri Altro materiale: documentazione su Java disponibile in rete

Transcript of 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: [email protected] URL:...

Page 1: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

1

Informazioni generali

Luca Becchetti• Tel.: 06 49918335• Email:

[email protected]

• URL: www.dis.uniroma1.it/~becchett

Ricevimento:• Latina: martedì e

giovedì, ore 9.00-9.45• Roma: mercoledì, ore

10-12, Dip. Informatica e Sistemistica, via Salaria 113 II piano, 00198 Roma

Testo adottato: • R. Sedgewick, Algoritmi

in Java, Addison Wesley• Ingegneria 2000, via

della polveriera 15 (S. Pietro in vincoli), tel. 06 4744169/06 4746609

Testi consigliati:• T. Cormen e altri.

Introduzione agli algoritmi. Ed. Jackson libri

Altro materiale: documentazione su Java disponibile in rete

Page 2: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

2

Informazioni generali/2 Java tutorial:

http://java.sun.com/docs/books/tutorial/ Il Java tutorial è parte di una più ampia

documentazione disponibile al sito Sun API Java: la documentazione è disponibile al sito:

http://java.sun.com/products/jdk/1.2/docs/api/index.html e può essere scaricata a partire da: http://java.sun.com/products/jdk/1.2/docs/

J. Bishop: Java gently – Corso introduttivo. Addison - Wesley

P. Niemeyer e altri. Learning Java. O'REILLY

D. Flanagan. Java in a nutshell. O'REILLY

Page 3: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

3

Obiettivi

A cosa serve la progettazione di algoritmi e strutture dati

Come si misura l’efficienza delle strutture dati e degli algoritmi

Come scegliere gli algoritmi e le strutture dati adatti a risolvere in modo efficiente un problema

Implementazione di algoritmi e strutture dati in Java

Page 4: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

4

Argomenti del corso Introduzione: efficienza e sua misura. Riepilogo sulle principali strutture dati di base:

liste, code, pile, alberi Code di priorità Dizionari Aspetti avanzati degli algoritmi di ordinamento Grafi

Rappresentazione e algoritmi di visita Algoritmo di Dijkstra per il calcolo del percorso minimo Minimo albero ricoprente (?)

Page 5: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

5

Algoritmi e strutture dati - Definizioni Struttura dati: organizzazione sistematica dei dati e del

loro accesso Algoritmo: procedura suddivisa in passi che, eseguiti in

sequenza, consentono di eseguire un compito in tempo finito

Esempio: Max. di un vettore di n elementi

Algorithm arrayMax(A, n)currentMax = A[0];for (i=0; i < n; i++)

if (A[i] > currentMax)currentMax = A[i];

return currentMax;

Page 6: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

6

Nel mondo reale.......

Gli algoritmi intervengono (in modo più o meno nascosto) in molti aspetti

Esempi• Internet• DBMS • Motori di ricerca• Struttura del Web• Analisi di documenti

Page 7: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

7

Esempio: Routing in Internet

Astrazione usando grafi:

I nodi rappresentano router

Gli archi descrivono i link fisici Costi sugli archi

(link) : ritardo, costo in € livello di congestione

Obiettivo: determinare “buon” cammino sorg.-

dest.

Protocollo di Routing

A

ED

CB

F

2

2

13

1

1

2

53

5

Cammino “buono”:• Di solito significa

cammino a costo minimo• Possibili def. alternative

Page 8: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

8

Esempio: Accesso a basi di dati

Obiettivo: rispondere rapidamente.

Interrogazione

Data RecordData base

. .

.

Interrogazione

Page 9: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

9

Qualità di algoritmi e strutture dati

Efficienza• Tempo di esecuzione• Spazio (quantità di memoria)

I due aspetti sono interdipendenti

Page 10: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

11

Come misurare l’efficienza?

Perché B gira più velocemente ? Possiamo affermare che B sia “migliore” di A?

Programma A

Problema

Programma B

10 ms

1 ms

Dati

Page 11: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

12

Misura dell’efficienza - obiettivi

Indipendenza dall’implementazione

Generale (valida per ogni input, di

qualsiasi dimensione)

Misura indipendente dalla

piattaforma Hw/Sw

Page 12: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

13

Modello di costo RAMRandom Access Machine

Assegnazione

Op. aritmetiche

Test

Lettura/Scrittura

A = 10; (costo 1) A = B*C + D – 7; (costo 4) A == B (costo 1)

System.out.println(A); (Costo

1)

Macchina che esegue le istruzioni in sequenza.Insieme di operazioni primitive a costo unitario:

Page 13: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

14

Modello di costo/2Costo di operazioni complesse:

Ciclo: somma costo test di fino ciclo e costo

corpo del ciclo

if…then…else: costo test più costo blocco

istruzioni che segue then o else (a seconda del

caso)

Attivazione di un metodo: somma dei costi di

tutte le istruzioni presenti nel metodo

Costo: somma di tutti i costi

Page 14: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

15

Esempio

Nel primo caso (vett. di 3 elementi) si ha costo 1 (ass.)+1 (ass. nel for) + 6 (test e incr. nel for) + 1 (test finale for) + 3 (test if) + 1 (istruz. return) = 13

Nel secondo caso si ha 1 (ass.) + 1 (ass. nel for) + 10 (test e incr. nel for) + 1 (test finale for) + 5 (test if) + 1 (istr. ass. nell’if) + 1 (istruz. return) = 20

AlgorithmarrayMax(A, n)currentMax=A[0]; for (i=0; i<n; i++)

if (A[i]>currentMax)

currentMax=A[i];return currentMax;

7

1

4

1

8

6

3

4

n=3 n=5

Page 15: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

16

Perché il modello è accettabile?

A=A+B*C;MUL B,CADD A,B

AB

C

N finito (es. 32 o 64 )

Ogni istruzionecorrisponde a una sequenza finita di istruzioni macchina

Ogni variabile occupauna quantità finita dimemoria e quindi i tempi di accesso a duevariabili sono legati da una costante

Page 16: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

17

Vantaggi e svantaggi

Vantaggi: prescinde dalla piattaforma Hw/Sw e dal linguaggio di programmazione

Svantaggi: l’indicazione che si ottiene è qualitativa

Page 17: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

18

Quale input considerare? La misura deve dipendere dalla dimensione

dell’input (n nel nostro esempio) ma non dal particolare input considerato

Possibile alternative: Analisi del caso peggiore: si considera il costo

di esecuzione nel caso peggiore Analisi del caso medio: si considera il costo

medio dell’algoritmo rispetto ad una distribuzione dell’input (richiede la conoscenza della distribuzione)

In ogni caso occorre definire la dimensione dell’input

Page 18: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

19

Dimensione dell’input

In generale: No. bit necessari a rappresentare l’input

Esempio (calcolo del Max. in un array di n interi) n interi finiti (< MAXINT) log(MAXINT) bit per rappresentare ogni

valore. Poiché MAXINT è una costante in pratica, il

numero di bit necessari a rappresentare un intero è costante (es. 32)

Quindi: dimensione input è proporzionale a n A volte le cose possono non essere così ovvie (v.

problema nell’ultima slide)

Page 19: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

20

AlgorithmarrayMax(A, n)currentMax=A[0]; for (i=0; i<n; i++)

if (A[i]>currentMax)

currentMax=A[i];return currentMax;

Analisi nel caso peggiore (esempio)

Nel caso peggiore l’elemento massimo è l’ultimo

In questa ipotesi l’istruzione

currentMax=A[i];

è eseguita n-1 volte. Il costo complessivo

dell’algoritmo è allora 1+1+(n-1)+1+2(n-1)+1=4n+1

1

4

6

3

8

Page 20: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

21

Analisi asintotica

Se si considerano tutte le costanti l’analisi può divenire eccessivamente complessa

Interessa conoscere il costo al variare della dimensione dell’input, a meno di costanti Motivo: il costo è comunque calcolato a

meno di costanti, per le ipotesi fatte circa il modello

Un’analisi di questo tipo è detta asintotica L’analisi asintotica è influenzata

dall’operazione dominante di un algoritmo

Page 21: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

22

Analisi asintotica/2 f(n), g(n) funzioni dagli interi ai reali f(n)=O(g(n)) se esiste c>0 reale, e una

costante intera n0 tali che f(n)≤cg(n) per ogni n>n0

f(n)=(g(n)) se esiste c>0 reale, e una costante intera n0 tali che, f(n)>c g(n) per ogni n>n0

Si osservi che f(n)=O(g(n)) implica g(n)=(f(n))

In base a tali definizioni, l’algoritmo AlgorithmarrayMax ha costo O(n)

Page 22: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

23

Istruzione dominante

Un’ operazione o istruzione si dice dominante se il numero d(n) di volte che essa è eseguita nel caso peggiore di input di dimensione n soddisfa:

f(n)<=a d(n) + b, dove f(n) è la complessità dell’algoritmo

nel caso peggiore ed a e b sono costanti opportune

Es.: istruzione if (A[i]>currentMax) in AlgorithmarrayMax(A, n)

Page 23: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

24

Esempi

In base a tali definizioni, l’algoritmo AlgorithmarrayMax ha costo

f(n)= 3n2+10 n = O(n2)

Per c=4 e n0>=10, 3n2+10 n <= 4 n2

Per c1= 1/14, c2= 1/2, n0>=7,

)(nΘ

)(321

)( 22 nnnnf Θ=−=

2

2

22

1 321

ncnnnc ≤−≤

Page 24: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

25

Analisi asintotica/3

Limiti dell’analisi asintotica: Le costanti nascoste possono essere

molto grandi: un algoritmo con costo 1050n è lineare ma potrebbe essere poco pratico

Comportamento nel caso di istanze “piccole” (es. 3n contro n2)

Il caso peggiore potrebbe verificarsi raramente

Page 25: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

26

Analisi di Insertion SortAlgorithm insertionSort(A, n)

for (i=0; i<n; i++) {tmp=A[i];for (j=i; j>0 &&

tmp<A[j-1]; j--)A[j]=A[j-1];

A[j] = tmp;}return A;

Inserisce l’elemento A[i] nella posizione corretta nel vettore ordinato A[0,…,i-1]

Ex: 5 4 3 2 1

i=0 5 4 3 2 1 0 confronti

i=1 4 5 3 2 1 1 confronto

i=2 3 4 5 2 1 2 confronti

i=3 2 3 4 5 1 3 confronti

i=4 1 2 3 4 5 4 confronti

Ex: 1 2 3 4 5 f(n)= n

)(2

)1()( 2

1

0

nOnn

infn

i

=−==∑−

=

Page 26: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

27

Esempiclass esercizio {

public void Ex1(int n) {int a, i;

for (i=0; i<n;i++)a=i;

}public void Ex2(int n) {int a, i;

for (i=0; i<n*n;i++)a=i;

}public void Ex3(int n) {int a, i, j;

for (i=0; i<n;i++) for (j=0; j<=i;j++)

a=i;}

}

Valutare la complessitàdei tre metodi

Complessità di Ex3: 1+2+....+n=O(n2)

Page 27: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

29

Metodo Divide et Impera

Il problema è risolto ricorsivamente attraverso la sua scomposizione in problemi di taglia inferiore

Divide: Problema suddiviso in un numero di sottoproblemi di taglia inferioreImpera: Sottoproblemi risolti ricorsivamente o direttamente se di dimensione piccola a sufficienzaCombina: Le soluzioni dei sottoproblemi sono combinate per ottenere la soluzione al problema originale

Page 28: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

30

Merge Sort A[0...n]

Si suppone n pari per semplicità

A[0...n/2-1] A[n/2...n-1]

Suddividi A in due sottovettori di dim. n/2

A[0...n/2-1] A[n/2...n-1]

MergeSort A[0...n/2-1] MergeSort A[n/2...n-1]

Merge

A ordinato

Page 29: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

31

Merge Sort/2

void mergesort(int[] A, int first, int last){ if (first < last) { int mid = (first + last) / 2; mergesort(A, first, mid); mergesort(A, mid+1, last); merge(A, first, last); }}

Page 30: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

32

Merge Sort A[0...n] /3

Divide: divide gli n elementi da ordinare in due sottosequenze da n/2 elementi. Costo: O(n)Impera: ordina ricorsivamente usando il merge sort le due sottosequenze. Costo: 2f(n/2)Combina: fonde le due sottosequenze ordinate. Costo: O(n)

La ricorsione termina quando si hanno solo due elementi da ordinare. Costo:O(1)

Costo dell’algoritmo Merge Sort:

⎩⎨⎧

>+=

=2),()2/(2

2),1()(

nnnf

nnf

θ

θ

Page 31: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

33

L’array [1 8 6 4 10 5 3 2 22]ordinatocon mergesort

Page 32: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

34

Mergevoid merge(int[] data, int first, int last) {

int mid = (first + last) / 2; int i1 = 0, i2 = first, i3 = mid + 1; while (i2 <= mid && i3 <= last) if (data[i2] <data[i3]) temp[i1++] = data[i2++]; else temp[i1++] = data[i3++]; while (i2 <= mid) temp[i1++] = data[i2++]; while (i3 <= last) temp[i1++] = data[i3++]; for (i1 = 0, i2 = first;

i2 <= last; data[i2++] = temp[i1++]);

}

Page 33: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

35

Equazioni di ricorrenza

Tempo di esecuzione di algoritmi ricorsivi descritti con equazioni di ricorrenza. Ex: MergeSort:

Semplificazioni: • Argomenti non interi.

• Condizioni al contorno: per n piccolo

⎩⎨⎧

>+=

=2 ,)2/(2

1 ,)(

2

1

nncnf

ncnf

⎡ ⎤ ⎣ ⎦⎩⎨⎧

>++=

=2),()2/()2/(

2),1()(

nnnfnf

nnf

θ

θ

)1(θ

Page 34: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

36

Soluzione di equazioni di ricorrenza

Metodo per sostituzione. Si tenta una soluzione e si verifica se soddisfa l’equazione di ricorsione.

Ex: Merge Sort: 21,,log)( cccaancnnf ≥≥+≤

ancn

anccnncn

ancncn

ancnncnf

+≤++−≤++≤

++≤

log log

)2/(log )2/(log)2/(2)(

2

2

2

aancncf =+≤= log)1( 1

Page 35: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

37

Esercizi

Mostrare che la soluzione di f(n)=f(n/2)+1 è O(log n)

Mostrare che la soluzione di f(n)=2f((n/2)+17)+n è O(n log n)

Page 36: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

38

Esercizi/2

Si consideri il problema della ricerca in un vettore di interi: dato il vettore A[1..n] ed un intero k, si vuole stabilire se k sia tra gli elementi di A o meno

• Considerato il classico algoritmo basato sulla ricerca binaria, si mostri che esso ha complessità O(log n)

Page 37: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì

39

Esercizi/3

Si consideri il problema di “indovinare” un numero intero nel numero minimo di tentativi: ad ogni tentativo, l’algoritmo propone un valore ad un oracolo, che conosce il numero da indovinare. L’oracolo risponde dicendo se il numero proposto sia maggiore, minore o uguale a quello da indovinare (nell’ ultimo caso il gioco termina).

• Si proponga un algoritmo efficiente e se ne esprima la complessità temporale in funzione del generico numero N da indovinare