Title: Presentazione di PowerPoint
1Ordinamento
Continuiamo a discutere il problema
dellordinamento
Ordinamento (Sorting) INPUT Sequenza di n numeri
lta1,a2, angt OUTPUT Permutazione
plta1, a2 , , angt lta1,a2, , angt
tale che a1 ? a2 ? ? an
Algoritmo di Insertion-Sort ? risolve il
problema dellordinamento
La complessità temporale (tempo di esecuzione
dellalgoritmo) dell Insertion-Sort verifica
T(n) ?(n2) nel caso peggiore e nel caso
medio T(n) ?(n) nel caso migliore
Oltre alla complessità temporale possiamo
studiare la complessita spaziale di un
algoritmo Complessità spaziale spazio di
memoria necessario per ospitare le strutture di
dati utilizzate dallalgoritmo.
La complessità spaziale dellinsertion sort è
?(n)
2Lalgoritmo di Insertion Sort è l unico
algoritmo possibile per risolvere il problema
dellordinamento? Ovviamente NO!
- Lalgoritmo di Selection Sort è definito dalla
seguente strategia - Al primo passo, si seleziona lelemento più
piccolo tra gli n elementi della sequenza, e lo
si pone nella prima posizione (scambiandolo con
lelemento A1 ) - Al secondo passo, si seleziona lelemento più
piccolo tra i rimanenti n-1 elementi di A, e lo
si pone nella seconda posizione (scambiandolo con
A2 ) - .
- .
- .
- Al k-esimo passo, si seleziona lelemento più
piccolo tra i rimanenti n-(k-1) elementi di A, e
lo si pone nella k-esima posizione (scambiandolo
con Ak) - .
- .
- .
- All(n-1)-esimo passo, si seleziona lelemento
più piccolo tra gli ultimi 2 elementi di A, e lo
si pone nella penultima posizione (scambiandolo
con An-1).
3Notare La strategia descritta prevede ad ogni
step la risoluzione dello stesso problema
(ricerca del minimo di una sequenza). gt Abbiamo
risolto il problema dellordinamento riconducendo
tale problema al più semplice problema di ricerca
del minimo.
Algoritmo per la ricerca dellelemento minimo di
una sequenza
Min_elemento(A) ind_min ? 1 For i? 2 to
length(A) do if (Ai lt Aind_min ) then
ind_min ? i Return ind_min
Qual è la complessità spaziale di questo
algoritmo?
S(n) ?(n)
Qual è la complessità temporale di questo
algoritmo?
T(n) ?(n) per tutti gli input
4Algoritmo Selection Sort
Selection-Sort(A) For j?1 to (length(A)-1)
do ind_min ? j For i? j1 to
length(A) do if (Ai lt
Aind_min ) then ind_min ? i
k ? Aind_min Aind_min ?
Aj Aj ? k
- Notiamo che lalgoritmo è corretto. Infatti
- L algoritmo termina sempre
- Per ogni istanza di input loutput è corretto.
- La correttezza dell algoritmo può essere
mostrata ragionando per induzione. Devo mostrare
che la seguente affermazione è vera per
j1,2,3,n-1 - Al j-esimo step lalgoritmo produce una sequenza
ordinata non decrescente A1,,Aj, dove A1
è il più piccolo elemento, A2 è il secondo
elemento piu piccolo , , Aj è il j-esimo
elemento più piccolo della sequenza iniziale. -
- Verifico la validità dellaffermazione per j1
- Assumo che la affermazione sia valida per un
generico valore di jh - Mostro che da ciò segue che la affermazione è
valida per jh1.
5Analisi del Selection Sort
Selection-Sort(A) For j?1 to (length(A)-1)
do ind_min ? j For i? j1 to
length(A) do if (Ai lt
Aind_min ) then ind_min ? i
k ? Aind_min Aind_min ?
Aj Aj ? k
()
- Complessità temporale del Selection Sort
- Qual è la linea (o il blocco di linee di codice)
che viene eseguito più volte (operazione
dominante)? - if (Ai lt Aind_min ) - operazione di
confronto - Quante volte viene eseguita?
- Il numero di volte che questa linea viene
eseguita dipende dall input? -
- No!
- La compl. temp. del selection sort è T(n)?(n2)
(indip. dallinput).
6Complessità intrinseca di un problema
Abbiamo introdotto 2 algoritmi (IS, SS) che
risolvono il problema dellordinamento SS
T(n) T(n2) IS - T(n) T(n2) Ci chiediamo
Si può fare di meglio? Più precisamente E
possibile risolvere il problema dell ordinamento
mediante algoritmi aventi un comportamento
asintotico migliore? Notare Per rispondere
alla domanda, dobbiamo alzare il livello della
nostra analisi. Dobbiamo discutere le proprietà
generali del problema, indipendentemente dagli
algoritmi specifici utilizzati per risolverlo.
7Prima di continuare
Quando forniamo limiti asintotici
superiori/inferiori alla complessità di un
algoritmo senza specificare le proprietà
dellinput, ci riferiamo implicitamente al caso
peggiore
T(n) O(f(n)) ? Per tutte le istanze di input
T(n) O(f(n)) ? Tworst(n)
O(f(n)), ma anche Tbest(n) O(f(n))
- T(n) ? (f(n)) ? Esiste almeno unistanza di
input per cui T(n) ? (f(n)) - Tworst (n) ?(f(n)), ma non è detto che Tbest(n)
O(f(n))
8Complessità intrinseca di un problema ?
Complessità computazionale di un
algoritmo
Un problema computazionale ha delimitazione
superiore alla complessità O(f(n)) (upper bound)
se esiste un algoritmo per la sua risoluzione con
delimitazione superiore O(f(n)).
Un problema computazionale ha delimitazione
inferiore alla complessita ?(f(n)) (lower bound)
se tutti gli algoritmi per la sua risoluzione
hanno delimitazione inferiore ?(f(n)).
Se dimostro che un problema ha delimitazione
inferiore ?(f(n)) e trovo un algoritmo avente
complesssità ?O(f(n)) allora a meno di
costanti, ho un algoritmo ottimale per risolvere
il problema!!!
Esempio di algoritmo ottimale ? Algoritmo per
la ricerca del minimo in un insieme non ordinato,
avente complessità O(n), Infatti, ogni algoritmo
dovrà almeno leggere linput, e quindi avrà
complessità ?(n).
9Problema dellordinamento Sappiamo per ora
che Lower bound - ?(n) (banale,
dimensione dellinput) Upper bound O(n2)
IS, BS Abbiamo un gap lineare tra
upper bound e lower bound. Possiamo fare meglio
.
10Lower Bound per il problema dellordinamento
Ordinamento per confronti Dati due elementi ai ed
aj, per determinarne lordinamento relativo
effettuiamo una delle seguenti operazioni di
confronto ai ? aj ai ? aj ai ?
aj ai ? aj ai ? aj Non si possono
esaminare i valori degli elementi o ottenere
informazioni sul loro ordine in altro modo.
Notare Tutti gli algoritmi di ordinamento
considerati fino ad ora sono algoritmi di
ordinamento per confronto.
11Gli algoritmi di ordinamento per confronto
possono essere descritti in modo astratto in
termini di ALBERI DI DECISIONE.
- Un generico algoritmo di ordinamento per
confronto lavora nel modo seguente - Confronta due elementi ai ed aj (ad esempio
effettua il test ai ? aj) - A seconda del risultato riordina e/o decide il
confronto successivo da eseguire.
Albero di decisione - Descrive i confronti che
lalgoritmo esegue quando opera su un input di
una determinata dimensione. I movimenti dei dati
e tutti gli altri aspetti dellalgoritmo vengono
ignorati
Albero di decisione dellalgoritmo Insertion Sort
a1a2
?
?
a2a3
a1a3
?
?
?
?
lta2,a1,a3gt
a2a3
lta1,a2,a3gt
a1a3
?
?
?
?
lta1,a3,a2gt
lta2,a3,a1gt
lta3,a1,a2gt
lta3,a2,a1gt
12Prima di discutere i dettagli, alcune definizioni
radice
a1a2
Sotto-albero sinistro
Sotto-albero destro
?
?
nodo
a2a3
a1a3
?
?
?
?
a1a3
lta2,a1,a3gt
a2a3
lta1,a2,a3gt
?
?
?
?
cammino
lta1,a3,a2gt
lta3,a1,a2gt
lta2,a3,a1gt
lta3,a2,a1gt
foglia
Profondità di un nodo lunghezza del cammino che
lo congiunge alla radice.
Altezza di un albero valore massimo della
profondità dei nodi.
Notare - (Numero di Foglie) ? 2h
h altezza
dellalbero
13Torniamo al problema dellordinamento
Insertion-Sort
a1a2
?
?
a2a3
a1a3
?
?
?
?
a1a3
lta2,a1,a3gt
a2a3
lta1,a2,a3gt
?
?
?
?
lta1,a3,a2gt
lta2,a3,a1gt
lta3,a1,a2gt
lta3,a2,a1gt
- Ogni foglia è etichettata con una permutazione
della sequenza iniziale - Lesecuzione dell algoritmo corrisponde a
tracciare un cammino dalla radice ad una foglia - Lalgoritmo segue un cammino diverso a seconda
delle caratteristiche dellinput - caso migliore cammino più breve
- caso peggiore cammino più lungo
- - Laltezza dellalbero fornisce il numero di
confronti che lalgoritmo esegue nel caso
peggiore.
14Limite inferiore al problema dellordinamento per
confronti
Insertion-Sort
a1a2
?
?
a2a3
a1a3
?
?
?
?
a1a3
lta2,a1,a3gt
a2a3
lta1,a2,a3gt
?
?
?
?
lta1,a3,a2gt
lta2,a3,a1gt
lta3,a1,a2gt
lta3,a2,a1gt
- Notiamo che
- il numero di foglie dellalbero di decisione
deve essere almeno pari al numero di possibili
permutazioni della sequenza iniziale - ( foglie) ? n!
- Come già detto, sussiste la seguente relazione
tra il numero di foglie e laltezza di un albero
binario - ( foglie) ? 2h
- Ciò implica
- 2h ? n!
- Da cio segue h ? log2(n!), e per
lapprossimazione di Stirling su n!, che impone
n!gt(n/e)n, ne segue che - h gt log2((n/e)n) ?(n log2(n))
15In conclusione
- Ricordando che laltezza dellalbero di decisione
indica il numero di confronti che un generico
algoritmo effettua nel caso peggiore, otteniamo - ? Algoritmo T(n) ?(n log2 (n))
- Quindi
- Lower Bound ?(n log2 (n))
- (problema dell ordinamento per
confronti)
- Esercizi
- Albero di decisione per SS (3 elementi)
- Ho scritto T(n) ?(n log2 (n)).
- Implica T(n) ?(n ln (n)) ?