maiuolo – Fondamenti di informaticamaiuolo – Fondamenti di informatica gegneria dell'informazione – UniPRgegneria dell'informazione – UniPR /www.ce.unipr.it/people/tomamic//www.ce.unipr.it/people/tomamic/
Complessità
Fondamenti di informatica
Michele Tomaiuolo
tomamic@ce.unipr.it
http://www.ce.unipr.it/people/tomamic
ondamenti di informaticaondamenti di informatica ell'informazione – UniPRell'informazione – UniPR ipr.it/people/tomamic/ipr.it/people/tomamic/
Ricerca lineare
// Schede: ordinate e numerate da 0 a N-1 Leggi ValoreCercato
Trovato ← Falso Indice ← 0
Finché Indice < N E Non Trovato { ValoreScheda ← Schede[Indice]
Se ValoreScheda = ValoreCercato Trovato ← Vero
Altrimenti
Indice ← Indice + 1 }
Se Trovato Scrivi "La posizione è " + Indice
maiuolo – Fondamenti di informaticamaiuolo – Fondamenti di informatica gegneria dell'informazione – UniPRgegneria dell'informazione – UniPR /www.ce.unipr.it/people/tomamic//www.ce.unipr.it/people/tomamic/
Ricerca binaria
// Schede: ordinate e numerate da 0 a N-1 Leggi ValoreCercato
Primo ← 0 ; Ultimo ← N – 1 ; Trovato ← Falso Finché Primo ≤ Ultimo E Non Trovato {
Medio ← (Primo+Ultimo)/2 ; X ← Schede[Medio]
Se X > ValoreCercato { Ultimo ← Medio - 1
} Altrimenti Se X < ValoreCercato { Primo ← Medio + 1
} Altrimenti { Trovato ← Vero }
} Se Trovato Scrivi "La posizione è " + Medio
Altrimenti Scrivi "Valore non trovato"
ondamenti di informaticaondamenti di informatica ell'informazione – UniPRell'informazione – UniPR ipr.it/people/tomamic/ipr.it/people/tomamic/
Costo di un algoritmo
Spazio, memoria richiesta
Tempo, necessario all'esecuzione
Di solito si contano i cicli, in funzione di n O i confronti/scambi tra elementi dell'array
– Array in memoria centrale, accesso lento
– Altre variabili nei registri del processore
Test e misure empiriche
maiuolo – Fondamenti di informaticamaiuolo – Fondamenti di informatica gegneria dell'informazione – UniPRgegneria dell'informazione – UniPR /www.ce.unipr.it/people/tomamic//www.ce.unipr.it/people/tomamic/
Confronto tra algoritmi
Caso peggiore negli algoritmi di ricerca: elemento non presente
Ricerca lineare: n confronti
Ricerca binaria: log
2(n) confronti
– A ogni iterazione l'insieme è dimezzato
– Il numero di iterazioni è pari a quante volte un numero n può essere diviso per 2
fino a ridurlo a 1
– 2
k≥ n → k ≥ log
2n
ondamenti di informaticaondamenti di informatica ell'informazione – UniPRell'informazione – UniPR ipr.it/people/tomamic/ipr.it/people/tomamic/
Def. di complessità
Una funzione f(n) ha ordine O(g(n)) sse:
– Esistono due costanti positive c e m tali che |f(n)| ≤ c|g(n)| per ogni n > m
Un algoritmo ha una complessità O(g(n)) sse:
– Il tempo di calcolo t(n), sufficiente per eseguire l'algoritmo con ogni istanza* di dimensione n, ha ordine O(g(n))
– (*) Insieme di dati su cui è definito il problema
– (*) Quindi conta il caso peggiore
maiuolo – Fondamenti di informaticamaiuolo – Fondamenti di informatica gegneria dell'informazione – UniPRgegneria dell'informazione – UniPR /www.ce.unipr.it/people/tomamic//www.ce.unipr.it/people/tomamic/
Analisi asintotica
Per n abbastanza grande, a meno di una costante moltiplicativa, f(n) non supera in modulo g(n)
Comportamento dell'algoritmo al limite, per dimensione delle istanze tendente all'infinito Es. n = 1 000 000
– Ricerca lineare:
1 000 000 cicli
– Ricerca binaria:
20 cicli
e
xx
2x·log(x) x
√x
log(x)
ondamenti di informaticaondamenti di informatica ell'informazione – UniPRell'informazione – UniPR ipr.it/people/tomamic/ipr.it/people/tomamic/
Complessità intrinseca
Limite inferiore di complessità di un problema Una funzione f(n) è Ω(g(n)) sse
– Esistono due costanti positive c e m tali che
|f(n)| ≥ c|g(n)| per ogni n > m
Un problema ha una delimitazione inferiore alla complessità Ω(g(n)) sse
– Per ogni algoritmo risolutivo…
∃ una istanza (caso peggiore)…
per cui il tempo di calcolo t(n) è Ω(g(n))
maiuolo – Fondamenti di informaticamaiuolo – Fondamenti di informatica gegneria dell'informazione – UniPRgegneria dell'informazione – UniPR /www.ce.unipr.it/people/tomamic//www.ce.unipr.it/people/tomamic/
Algoritmo ottimale
Algoritmo che risolve un problema P, con le due seguenti condizioni:
– Costo di esecuzione O(g(n))
– P ha una delimitazione inferiore Ω(g(n))
Es. L'algoritmo della ricerca binaria è ottimale
– Si può dimostrare che log
2(n) è la minima complessità possibile per la ricerca
– Ma ricerca lineare funziona anche per liste non ordinate!
ondamenti di informaticaondamenti di informatica ell'informazione – UniPRell'informazione – UniPR ipr.it/people/tomamic/ipr.it/people/tomamic/
Algoritmi di ordinamento
La ricerca binaria dimostra l'importanza di avere dati ordinati
– Ordinateur, ordenador
Algoritmi più semplici hanno complessità n
2– Confronto tra ciascun elemento e gli altri
Algoritmi divide et impera
– Complessità n·log
2(n)
– Complessità instrinseca
maiuolo – Fondamenti di informaticamaiuolo – Fondamenti di informatica gegneria dell'informazione – UniPRgegneria dell'informazione – UniPR /www.ce.unipr.it/people/tomamic//www.ce.unipr.it/people/tomamic/
Bubble sort
// Schede: N schede, numerate da 0 a N-1 Ultimo ← N – 1
Finché Ultimo > 0 { I ← 0
Finché I < Ultimo {
Se Schede[I] > Schede[I + 1] { Scambia(I, I + 1)
} I ← I + 1 }
Ultimo ← Ultimo – 1 }
B B C C A A
FF DDE E G G H H
Confronti e scambi Confronti e scambi
Nel primo ciclo, il valore maggiore
sale fino in cima Nel primo ciclo, il valore maggiore
sale fino in cima
ondamenti di informaticaondamenti di informatica ell'informazione – UniPRell'informazione – UniPR ipr.it/people/tomamic/ipr.it/people/tomamic/
Analisi Bubble Sort
Gli elementi maggiori salgono rapidamente
“come bollicine di champagne”
Caso peggiore: lista rovesciata
– Numero di confronti e scambi: n
2/2
– (n-1)+(n-2)+...+2+1 = n(n-1)/2 = n
2/2 - n/2 ≈ n
2/2
– Complessità n
2Anche in media, circa stessi valori
maiuolo – Fondamenti di informaticamaiuolo – Fondamenti di informatica gegneria dell'informazione – UniPRgegneria dell'informazione – UniPR /www.ce.unipr.it/people/tomamic//www.ce.unipr.it/people/tomamic/
Selection sort
// Schede: N schede, numerate da 0 a N-1 I ← 0
Finché I < N - 1 { PosMin ← I
J ← I + 1
Finché J < N {
Se Schede[J] < Schede[PosMin] { PosMin ← J
}
J ← J + 1
} Scambia(PosMin, I) I ← I + 1
}
A A B B C C E E G G F F H H
Sx: parte ordinata
Sx: parte ordinata Dx: parte da ordinareDx: parte da ordinare DD
Si cerca a dx il valore
minimo Si cerca a dx
il valore minimo
ondamenti di informaticaondamenti di informatica ell'informazione – UniPRell'informazione – UniPR ipr.it/people/tomamic/ipr.it/people/tomamic/
Analisi Selection Sort
Ad ogni ciclo principale, si seleziona il valore minore Caso peggiore: lista rovesciata
– Numero di confronti n·(n-1)/2; complessità n
2– Numero di scambi: n-1 scambi
Anche in media, circa stessi valori
maiuolo – Fondamenti di informaticamaiuolo – Fondamenti di informatica gegneria dell'informazione – UniPRgegneria dell'informazione – UniPR /www.ce.unipr.it/people/tomamic//www.ce.unipr.it/people/tomamic/
Insertion sort
// Schede: N schede, numerate da 0 a N - 1 I ← 1
Finché I < N {
Valore ← Schede[I]
J ← I – 1
Finché J ≥ 0 E Schede[J] > Valore { Schede[J + 1] ← Schede[J]
J ← J – 1 }
Schede[J + 1] ← Valore I ← I + 1
}
A A D D G G C C B B F F H H
Sx: parte ordinata
Sx: parte ordinata Dx: parte da ordinareDx: parte da ordinare EE
Si cerca a sx il posto per il primo val a dx Si cerca a sx il posto per il primo val a dx
ondamenti di informaticaondamenti di informatica ell'informazione – UniPRell'informazione – UniPR ipr.it/people/tomamic/ipr.it/people/tomamic/
Analisi Insertion Sort
La prima parte è ordinata, vi si inserisce un elemento alla volta, più facile trovare il posto
– In media si scorre solo 1/2 della prima parte
Caso peggiore: lista rovesciata
– Cicli: 1+2+...+(n-1) = n·(n-1)/2; compl: O(n
2)
In media n
2/4 confronti e n
2/4 scambi Ottimizzazioni
– Ricerca binaria in parte ordinata, ma scambi
maiuolo – Fondamenti di informaticamaiuolo – Fondamenti di informatica gegneria dell'informazione – UniPRgegneria dell'informazione – UniPR /www.ce.unipr.it/people/tomamic//www.ce.unipr.it/people/tomamic/
Quick Sort
// N schede, ordinare quelle tra Prima e Ultima Se Prima < Ultima {
Pivot ← Schede[Ultima]
J ← Prima; I ← Prima Finché I < Ultima {
Se Schede[I] ≤ Pivot { Scambia(I, J)
J ← J + 1 }
I ← I + 1
} Scambia(Ultima, J)
QuickSort(Prima, J - 1) QuickSort(J + 1, Ultima) }
Prima di J:
valori minori di pivot Prima di J: valori minori
di pivot
I scorre tutte le schede
tranne l'ultima (pivot) I scorre tutte le schede
tranne l'ultima (pivot)
C C A A B B G G E E F F H H
Val ≤ Pivot
Val ≤ Pivot Val > PivotVal > Pivot DD
H H C C G G A A B B E E F F D D
Pivot Pivot
ondamenti di informaticaondamenti di informatica ell'informazione – UniPRell'informazione – UniPR ipr.it/people/tomamic/ipr.it/people/tomamic/
Analisi Quick Sort
Dato un insieme, sceglie un valore pivot Crea due sottoinsiemi: x ≤ pivot, x > pivot Stesso algoritmo sui 2 insiemi (ricorsione)
Caso peggiore: lista rovesciata, n
2– Dipende da scelta pivot, ma esiste sempre
Caso medio: n·log
2(n)
– t(n) = α·n + 2·t(n/2)
maiuolo – Fondamenti di informaticamaiuolo – Fondamenti di informatica gegneria dell'informazione – UniPRgegneria dell'informazione – UniPR /www.ce.unipr.it/people/tomamic//www.ce.unipr.it/people/tomamic/
Merge Sort
// N schede, ordinare quelle tra Prima e Ultima Se Prima < Ultima {
Media ← (Prima + Ultima) / 2 MergeSort(Prima, Media)
MergeSort(Media + 1, Ultima) Merge(Prima, Media, Ultima) }
D D G G H H C C E E F F
AA BB
Merge: O(n) Confronti sempre tra
primi valori Merge: O(n) Confronti sempre tra
primi valori Ad ogni passo
la lista viene divisa nel mezzo Ad ogni passo la lista viene divisa
nel mezzo
G G D D A A H H E E F F C C B B G G D D A A H H E E F F C C B B G G D D A A H H E E F F C C B B G G D D A A H H E E F F C C B B
Costo ∝ n
Costo ∝ 2·n/2
Costo ∝ 4·n/4
ondamenti di informaticaondamenti di informatica ell'informazione – UniPRell'informazione – UniPR ipr.it/people/tomamic/ipr.it/people/tomamic/
Merge, con appoggio
// Fondere Schede: Prima…Media e Media+1…Ultima I ← Prima ; J ← Media + 1 ; K ← 0
Finché I ≤ Media E J ≤ Ultima { Se Schede[I] ≤ Schede[J]) {
Tmp[K] ← Schede[I] ; I ← I + 1 } Altrimenti {
Tmp[K] ← Schede[J] ; J ← J + 1 } K ← K + 1
}
Finché I ≤ Media { Tmp[K] ← Schede[I] ; I ← I+1 ; K ← K+1 } Finché J ≤ Ultima { Tmp[K] ← Schede[J] ; J ← J+1 ; K ← K+1 } K ← Prima
Finché K ≤ Ultima { Scheda[K] ← Tmp[K–Prima] ; K ← K+1 }
maiuolo – Fondamenti di informaticamaiuolo – Fondamenti di informatica gegneria dell'informazione – UniPRgegneria dell'informazione – UniPR /www.ce.unipr.it/people/tomamic//www.ce.unipr.it/people/tomamic/
Analisi Merge Sort
Simile a Quick Sort, ma non si sceglie pivot
– La fusione ha complessità lineare
– Caso peggiore, caso medio: n·log
2(n)
Spazio: la fusione richiede altra memoria: n
– Ma si può evitare il costo con liste collegate, o con spostamenti in place
– Accessi sequenziali, buon uso cache
Integraz. con Insertion Sort (Python, Java7)
ondamenti di informaticaondamenti di informatica ell'informazione – UniPRell'informazione – UniPR ipr.it/people/tomamic/ipr.it/people/tomamic/
Classi di complessità
Costante: numero op. non dipende da n
Sotto-lineare: n
k, k<1; log(n), ricerca binaria Lineare: numero op. ∝ n, ricerca lineare
Sovra-lineare: n·log(n), merge sort Polinomiale: n
k, k≥2, insertion sort
Algoritmo efficiente: fino a classe polinomiale
Problema trattabile: ∃ algoritmo efficiente
maiuolo – Fondamenti di informaticamaiuolo – Fondamenti di informatica gegneria dell'informazione – UniPRgegneria dell'informazione – UniPR /www.ce.unipr.it/people/tomamic//www.ce.unipr.it/people/tomamic/