Ordinamento di una lista: bubble-sort L idea è di far galleggiare il minimo della lista nelle prima posizione Riduco la parte di lista da considerare, escludendo le prime posizioni già ordinate
Ordinamento: bubble-sort Passo 1: parto dalla fine dell array e scambio il valore di due elementi se quello con l indice più alto è minore dell altro. Prova(1) Prova(2) Prova(3) Prova(4) Prova(5) 1 87 14 27 22 Prova(1) Prova(2) Prova(3) Prova(4) Prova(5) 1 87 14 22 27 Prova(1) Prova(2) Prova(3) Prova(4) Prova(5) 1 14 87 22 27
Ordinamento: bubble-sort Passo 2: riduco l array da considerare per l ordinamento e ripeto il passo 1 Prova(1) Prova(2) Prova(3) Prova(4) Prova(5) 1 14 87 22 27 Parte ordinata Prova(1) Prova(2) Prova(3) Prova(4) Prova(5) 1 14 87 22 27 Prova(1) Prova(2) Prova(3) Prova(4) Prova(5) 1 14 22 87 27
Ordinamento: bubble-sort Passo 3: riduco l array da considerare per l ordinamento e ripeto il passo 1 Prova(1) Prova(2) Prova(3) Prova(4) Prova(5) 1 14 22 87 27 Parte ordinata Prova(1) Prova(2) Prova(3) Prova(4) Prova(5) 1 14 22 27 87
Selection sort in Matlab Incremento la dimensione della parte ordinata: ad ogni iterazione del ciclo di i la parte disordinata parte da un indice più grande Col ciclo di j scorro la parte disordinata dalla fine del vettore fino all indice i Vengono confrontati i valori adiacenti. Se sono in ordine sbagliato vengono scambiati di posto function xout=bubblesort(xin); xout=xin; n=length(xout); for i=2:n-1, for j=n:-1:i if(xout(j) < xout(j-1)), tmp=xout(j-1); xout(j-1)=xout(j); xout(j)=tmp; end; end; end; return;
Attributi degli algoritmi: correttezza La prima caratteristica di un algoritmo è la correttezza, cioè deve fornire una soluzione corretta del problema e terminate. Riduco la parte di lista da considerare, escludendo le prime posizioni già ordinate
Attributi degli algoritmi: efficienza Tempo e spazio di memoria sono risorse limitate di un calcolatore, per cui dovendo scegliere fra due algoritmi corretti, si preferirà quello che usa meno risorse. L efficienza di un algoritmo indica quanto parsimoniosamente esso utilizza le risorse a disposizioene
Notazione o(), O(), Θ() Per quantificare l efficienza di un algoritmo al variare della numerosità dei dati su cui agisce si usa cercare di esprimere la sua complessità computazionale in termini di funzioni della numerosità dei dati n che fungano da limite inferiore, limite superiore, o di un andamento asintotico.
Limite inferiore: o() Si dice che una funzione f(n) è o piccolo di una funzione g(n), scrivendo f(n)=o(g(n)),se: n, M : n > n M g( n) f ( n) 0 0 f(n) g(n) n 0 n
Limite superiore: O() Si dice che una funzione f(n) è o grande di una funzione g(n), scrivendo f(n)=o(g(n)),se: n, M : n > n f ( n) M g( n) 0 0 f(n) g(n) n 0 n
Andamento asintotico: Θ() Si dice che una funzione f(n) è theta grande di una funzione g(n), scrivendo f(n)=θ(g(n)),se la funzione f(n) è contemporaneamente o(g(n)) ed O(g(n)): f(n) g(n) n 0 n
Selection-sort: efficienza 1) Seleziona l elemento più piccolo nell array 2) Scambia l elemento selezionato con il primo 3) Ordina la parte restante dell array, cioè riduco la parte di array da considerare, escludendo le prime posizioni già ordinate
Selection-sort: efficienza 1) Per selezionare l elemento più piccolo di un array devo analizzare tutti gli elementi di un array, e quindi è un operazione che implica n operazioni
Selection-sort: efficienza 2) Lo scambio di un elemento con un altro viene fatto in tempo costante indipendente dalla dimensione dell array
Selection-sort: efficienza 3) La parte disordinata dell array si riduce di un elemento e ripeto la procedura.
Selection-sort: efficienza 1) Al primo passo devo trovare il minimo su un array disordinato di n elementi 2) Al secondo passo devo trovare il minimo su un array disordinato di n-1 elementi 3) Al terzo passo devo trovare il minimo su un array disordinato di n-2 elementi 4).
Selection-sort: efficienza Per completare l argomento bisogna sommare la complessità computazionale di tutti i passi: n+(n-1)+(n-2)+ +2+1 n i= 1 n( n 1) n n ( n i) = = = O( n 2 2 2 2 2 )
Bubble-sort: efficienza L idea è di far galleggiare il minimo della lista nelle prima posizione Riduco la parte di lista da considerare, escludendo le prime posizioni già ordinate
Bubble-sort: efficienza In maniera del tutto analoga a selectio-sort, la parte disordinata dell array si riduce di un solo elemento ad ogni passo, e tutti gli elementi della parte disordinata devono essere analizzati
Bubble sort: efficienza Come per selection sort bisogna sommare la complessità computazionale di tutti i passi: n+(n-1)+(n-2)+ +2+1 n i= 1 n( n 1) n n ( n i) = = = O( n 2 2 2 2 2 )