Capitolo 4 Ordinamento Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 2 Dato un insieme S di n oggetti presi da un dominio totalmente ordinato, ordinare S Ordinamento Esempi: ordinare una lista di nomi alfabeticamente, o un insieme di numeri, o un insieme di compiti desame in base al cognome dello studente Subroutine in molti problemi E possibile effettuare ricerche in array ordinati in tempo O(log n)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 3 Il problema dellordinamento Input: una sequenza di n numeri Output: una permutazione (riarrangiamento) della sequenza di input tale che a i 1 a i 2 … a i n
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 4 SelectionSort Approccio incrementale: estende lordinamento da k a k+1 elementi, scegliendo il minimo degli n-k elementi non ancora ordinati e mettendolo in posizione k+1
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 5 SelectionSort (A) 1. for k=0 to n-2 do 2. m = k+1 3. for j=k+2 to n do 4. if (A[j] < A[m]) then m=j 5. scambia A[m] con A[k+1] Allinizio del generico passo k, k=0,…,n-2, A[1],…,A[k] sono già ordinati (per k=0, nulla è ordinato) linee 2-4: ricerca del minimo fra gli elementi A[k+1],…,A[n] m è lindice dellarray in cui si trova il minimo il minimo è spostato in posizione k+1 al fine del generico passo k, k=0,…,n-2, A[1],…,A[k+1] sono ordinati NOTA: Assumiamo che il primo elemento dellarray sia in A[1]
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 6 Correttezza Si dimostra facendo vedere che alla fine del generico passo k (k=0,…,n-2) si ha: (i) i primi k+1 elementi sono ordinati e (ii) contengono i k+1 elementi più piccoli dellarray Induzione su k: –k=0: Alla prima iterazione viene semplicemente selezionato lelemento minimo dellarray (i) e (ii) banalmente verificate. –k>0. Allinizio del passo k i primi k elementi sono ordinati e sono i k elementi più piccoli nellarray (ipotesi induttiva). Allora la tesi segue dal fatto che lalgoritmo seleziona il minimo dai restanti n-k elementi e lo mette in posizione k+1. Infatti: (ii) i k+1 elementi restano i minimi nellarray (i) lelemento in posizione k+1 non è mai più piccolo dei primi k
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 7 Complessità temporale SelectionSort (A) 1. for k=0 to n-2 do 2. m = k+1 3. for j=k+2 to n do 4. if (A[j] < A[m]) then m=j 5. scambia A[m] con A[k+1] n-k-1 confronti 1 scambio (3 assegnamenti) il tutto eseguito n-1 volte T(n) = [1+(n-k-1)+3]= (k+4) = n·(n-1)/2+4·(n-1)= (n 2 ) k=0 n-2 T worst (n) = T best (n) = T avg (n) = (n 2 ) k=1 n-1 1 assegnamento
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 8 InsertionSort Approccio incrementale: estende lordinamento da k a k+1 elementi, posizionando lelemento (k+1)-esimo nella posizione corretta rispetto ai primi k elementi
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 9 InsertionSort (A) 1. for k=1 to n-1 do 2. x = A[k+1] 3. for j=1 to k+1 do 4. if (A[j] > x) then break 5. if (j < k+1) then 6. for t=k downto j do A[t+1]= A[t] 7. A[j]=x Allinizio del generico passo k, A[1],…,A[k] sono già ordinati elemento x=A[k+1] inserito nella posizione che gli compete righe 3 e 4: individuano la posizione j in cui va messo x riga 6: fa spazio per inserire x Alla fine del generico passo k, A[1],…,A[k+1] sono ordinati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 10 Correttezza Si dimostra facendo vedere che alla fine del generico passo k (k=1,…,n-1) i primi k+1 elementi sono ordinati (si noti la differenza con il Selection Sort, in cui invece dovevo far vedere che erano i più piccoli) Induzione su k: –k=1: banale: si riordinano A[1] e A[2]; –k>1: Allinizio del passo k i primi k elementi sono ordinati (ipotesi induttiva). Allora la tesi segue dalla struttura dellalgoritmo, il quale inserisce A[k+1] nella giusta posizione della sequenza
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 11 Complessità temporale Notazione asintotica Quando parliamo di complessità di un algoritmo, ci riferiamo implicitamente al caso peggiore Ne consegue che è sufficiente considerare le cosidette operazioni dominanti, ovvero quelle che nel caso peggiore vengono eseguite più spesso Queste si trovano annidate nei cicli più interni dello pseudocodice che descrive lalgoritmo
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 12 InsertionSort (A) 1. for k=1 to n-1 do 2. x = A[k+1] 3. for j=1 to k+1 do 4. if (A[j] > x) then break 5. if (j < k+1) then 6. for t=k downto j do A[t+1]= A[t] 7. A[j]=x T(n) = (k+1) = (n 2 ) tk+1 confronti k+1–t assegnamenti il tutto eseguito n-1 volte k=1 n-1 T worst (n) = T best (n) = T avg (n) = (n 2 ) Possiamo fare meglio? k+1 oper. Complessità temporale
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 13 Complessità spaziale Ricordiamo che oltre alla complessità temporale dobbiamo valutare anche la complessità spaziale di un algoritmo, ovvero lo spazio di memoria necessario per ospitare le strutture di dati utilizzate dallalgoritmo. La complessità spaziale del Selection Sort e dellInsertion Sort è Θ (n) Nota: Se la complessità spaziale di un certo algoritmo è (g(n)) e tale algoritmo per sua natura è costretto ad ispezionare lintera memoria occupata, allora la complessità temporale dellalgoritmo è (g(n)).
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 14 Conseguenze per il problema dellordinamento La complessità spaziale di qualsiasi algoritmo che risolve il problema dellordinamento è (n)… …ma qualsiasi algoritmo che risolve il problema dellordinamento deve ispezionare tutti i dati in ingresso, e quindi ha complessità temporale T(n)= (n) Il problema dellordinamento ha delimitazione inferiore (lower bound) alla complessità temporale (n).
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 15 InsertionSort2 (A) 1. for k=1 to n-1 do 2. x = A[k+1] 3. j = k 4. while j > 0 e A[j] > x do 5. A[j+1] = A[j] 6. j= j-1 7. A[j+1]=x il tutto eseguito n-1 volte t k 2k assegnam. T(n) = t k 2k T(n) = O(n 2 ) k=1 n-1 k=1 n-1 Complessità temporale
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 16 Caso migliore, peggiore, medio Caso migliore –array già ordinato in ordine crescente t k = 0 T best (n) = (n) (costo del ciclo for esterno) Caso peggiore –array ordinato in ordine decrescente t k = 2k T(n):= T worst (n)= 2k = (n 2 ) Caso medio –array disordinato t k = k T avg (n)= k = (n 2 ) k=1 n-1
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 17 Esercizi di approfondimento Illustrare levoluzione di Insertion-Sort applicata allarray A= Riscrivere la procedura di Insertion-Sort per ordinare in modo non crescente