Title: Informazioni generali
1Informazioni generali
- Luca Becchetti
- Tel. 06 49918335
- Email becchett_at_dis.uniroma1.it
- 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
2Informazioni generali/2
- Java tutorial http//java.sun.com/docs/books/tuto
rial/ - 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/ap
i/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
3Obiettivi
- A cosa serve la progettazione di algoritmi e
strutture dati - Come si misura lefficienza 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
4Argomenti 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 (?)
5Algoritmi 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 A0
- for (i0 i lt n i)
- if (Ai gt currentMax)
- currentMax Ai
- return currentMax
6Nel 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
7Esempio Routing in Internet
Protocollo di Routing
Obiettivo determinare buon cammino sorg.-dest.
- Astrazione usando grafi
- I nodi rappresentano router
- Gli archi descrivono i link fisici
- Costi sugli archi (link) ritardo, costo in
livello di congestione
- Cammino buono
- Di solito significa cammino a costo minimo
- Possibili def. alternative
8Esempio Accesso a basi di dati
Interrogazione
Obiettivo rispondere rapidamente.
Interrogazione
9Qualità di algoritmi e strutture dati
- Efficienza
- Tempo di esecuzione
- Spazio (quantità di memoria)
- I due aspetti sono interdipendenti
10Tempo di esecuzione
- In generale aumenta con n
- Per lo stesso valore di n può variare con il
particolare input considerato (es. Vettore da
ordinare) - Dipende dalla piattaforma Hw/Sw
- In generale può essere poco rappresentativo
11Come misurare lefficienza?
10 ms
1 ms
- Perché B gira più velocemente ?
- Possiamo affermare che B sia migliore di A?
12Misura dellefficienza - obiettivi
- Indipendenza dallimplementazione
- Generale (valida per ogni input, di qualsiasi
dimensione) - Misura indipendente dalla piattaforma Hw/Sw
13Modello di costo RAMRandom Access Machine
- Macchina che esegue le istruzioni in sequenza.
- Insieme di operazioni primitive a costo unitario
- A 10 (costo 1)
- A BC D 7 (costo 4)
- A B (costo 1)
- System.out.println(A) (Costo 1)
- Assegnazione
- Op. aritmetiche
- Test
- Lettura/Scrittura
14Modello di costo/2
- Costo di operazioni complesse
- Ciclo somma costo test di fino ciclo e costo
corpo del ciclo - ifthenelse 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
15Esempio
- 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. nellif) 1
(istruz. return) 20
- AlgorithmarrayMax(A, n)
- currentMaxA0
- for (i0 iltn i)
- if (AigtcurrentMax)
- currentMaxAi
- return currentMax
1
8
7
6
1
3
4
4
n3
n5
16Perché il modello è accettabile?
Ogni istruzione corrisponde a una sequenza
finita di istruzioni macchina
MUL B,C ADD A,B
AABC
Ogni variabile occupa una quantità finita
di memoria e quindi i tempi di accesso a
due variabili sono legati da una costante
B
A
C
N finito (es. 32 o 64 )
17Vantaggi e svantaggi
- Vantaggi prescinde dalla piattaforma Hw/Sw e
dal linguaggio di programmazione - Svantaggi lindicazione che si ottiene è
qualitativa
18Quale input considerare?
- La misura deve dipendere dalla dimensione
dellinput (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 dellalgoritmo rispetto ad una
distribuzione dellinput (richiede la conoscenza
della distribuzione) - In ogni caso occorre definire la dimensione
dellinput
19Dimensione dellinput
- In generale No. bit necessari a rappresentare
linput - Esempio (calcolo del Max. in un array di n
interi) - n interi finiti (lt 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 nellultima slide)
20Analisi nel caso peggiore (esempio)
- AlgorithmarrayMax(A, n)
- currentMaxA0
- for (i0 iltn i)
- if (AigtcurrentMax)
- currentMaxAi
- return currentMax
- Nel caso peggiore lelemento massimo è lultimo
- In questa ipotesi listruzione
- currentMaxAi
- è eseguita n-1 volte.
- Il costo complessivo dellalgoritmo è allora
11(n-1)12(n-1)14n1
1
4
6
3
8
21Analisi asintotica
- Se si considerano tutte le costanti lanalisi può
divenire eccessivamente complessa - Interessa conoscere il costo al variare della
dimensione dellinput, a meno di costanti - Motivo il costo è comunque calcolato a meno di
costanti, per le ipotesi fatte circa il modello - Unanalisi di questo tipo è detta asintotica
- Lanalisi asintotica è influenzata
dalloperazione dominante di un algoritmo
22Analisi asintotica/2
- f(n), g(n) funzioni dagli interi ai reali
- f(n)O(g(n)) se esiste cgt0 reale, e una costante
intera n0 tali che f(n)cg(n) per ogni ngtn0 - f(n)?(g(n)) se esiste cgt0 reale, e una costante
intera n0 tali che, f(n)gtc g(n) per ogni ngtn0 - Si osservi che f(n)O(g(n)) implica g(n)?(f(n))
- In base a tali definizioni, lalgoritmo
AlgorithmarrayMax ha costo O(n)
23Istruzione 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)lta d(n) b,
- dove f(n) è la complessità dellalgoritmo nel
caso peggiore ed a e b sono costanti opportune - Es. istruzione if (AigtcurrentMax) in
AlgorithmarrayMax(A, n)
24Esempi
- In base a tali definizioni, lalgoritmo
AlgorithmarrayMax ha costo - f(n) 3n210 n O(n2)
- Per c4 e n0gt10, 3n210 n lt 4 n2
-
- Per c1 1/14, c2 1/2, n0gt7,
-
25Analisi asintotica/3
- Limiti dellanalisi 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
26Analisi di Insertion Sort
- Algorithm insertionSort(A, n)
- for (i0 iltn i)
- tmpAi
- for (ji jgt0 tmpltAj-1 j--)
- AjAj-1
- Aj tmp
-
- return A
Ex 5 4 3 2 1 i0 5 4 3 2 1 0 confronti
i1 4 5 3 2 1 1 confronto i2 3 4 5 2 1 2
confronti i3 2 3 4 5 1 3 confronti i4 1 2 3
4 5 4 confronti Ex 1 2 3 4 5 f(n) n
Inserisce lelemento Ai nella posizione
corretta nel vettore ordinato A0,,i-1
27Esempi
- class esercizio
- public void Ex1(int n)
- int a, i
- for (i0 iltni)
- ai
-
- public void Ex2(int n)
- int a, i
- for (i0 iltnni)
- ai
-
- public void Ex3(int n)
- int a, i, j
- for (i0 iltni)
- for (j0 jltij)
- ai
-
Valutare la complessità dei tre metodi
Complessità di Ex3 12....nO(n2)
28Calcolo delle somme dei prefissi
- Dato un vettore di interi X0....n-1, calcolare
le componenti del vettore A0...n-1 tale che
AiX0....Xi-1. Due algoritmi
Algorithm prefix2(X, n) A0X0 for (i1
iltn i) AiAi-1Xi return A O(n)
Algorithm prefix1(X, n) for (i0 iltn i)
Ai0 for (j0 jlti j) AiAiX
j return A O(n2)
29Metodo 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 inferiore - Impera Sottoproblemi risolti ricorsivamente o
direttamente se di dimensione piccola a
sufficienza - Combina Le soluzioni dei sottoproblemi sono
combinate per ottenere la soluzione al problema
originale
30Merge Sort A0...n
A0...n/2-1
An/2...n-1
Suddividi A in due sottovettori di dim. n/2
A0...n/2-1
An/2...n-1
MergeSort A0...n/2-1
MergeSort An/2...n-1
Merge
- Si suppone n pari per semplicitÃ
A ordinato
31Merge Sort/2
void mergesort(int A, int first, int last)
if (first lt last) int mid
(first last) / 2 mergesort(A,
first, mid) mergesort(A, mid1,
last) merge(A, first, last)
32Merge Sort A0...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. CostoO(1) - Costo dellalgoritmo Merge Sort
-
33Larray 1 8 6 4 10 5 3 2 22ordinatocon
mergesort
34Merge
void merge(int data, int first, int last)
int mid (first last) / 2 int i1
0, i2 first, i3 mid 1 while (i2
lt mid i3 lt last) if (datai2
ltdatai3) tempi1
datai2 else tempi1
datai3 while (i2 lt mid)
tempi1 datai2 while (i3 lt
last) tempi1 datai3
for (i1 0, i2 first i2 lt last
datai2 tempi1)
35Equazioni 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
36Soluzione di equazioni di ricorrenza
- Metodo per sostituzione. Si tenta una soluzione
e si verifica se soddisfa lequazione di
ricorsione. - Ex Merge Sort
37Esercizi
- 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)
38Esercizi/2
- Si consideri il problema della ricerca in un
vettore di interi dato il vettore A1..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)
39Esercizi/3
- Si consideri il problema di indovinare un
numero intero nel numero minimo di tentativi ad
ogni tentativo, lalgoritmo propone un valore ad
un oracolo, che conosce il numero da indovinare.
Loracolo 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