Ordinamento di una lista: bubble-sort

Documenti analoghi
Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Tecniche di Ordinamento dei Vettori

Algoritmi e Strutture Dati

Ordinamento di una lista: bubble-sort

Liceo B.Russell Classe 2 I VETTORI. ORDINAMENTO DI UN VETTORE: Metodo ingenuo o sequenziale

Calcolo Parallelo e Distribuito

Calcolo Parallelo e Distribuito

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Algoritmi di Ricerca Ordinamento

Ω (grande omega) Esempio 10 COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Corso di Tecniche di Programmazione

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Lezione 4 Ugo Vaccaro

PASCAL: I VETTORI TRATTO DA CAMAGNI-NIKOLASSY, CORSO DI INFORMATICA, VOL. 1, HOEPLI. Informatica

Tempo e spazio di calcolo

Corso di Fondamenti di Informatica

Fondamenti di Informatica

A lezione sono stati presentati i seguenti passi per risolvere un problema:

Strutture dati e algoritmi. Sommario

Primo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Studio degli algoritmi

Sommario. Ordinamento. Selection Sort Bubble Sort/ Shaker Sort Shell Sort

Algoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati.

Algoritmi e Strutture Dati

Esercizi per il corso di Algoritmi

Corso di Fondamenti di Informatica e Laboratorio

ALGORITMI DI ORDINAMENTO ALGORITMI DI ORDINAMENTO

Soluzione di Equazioni non lineari

Algoritmi di ordinamento

Esercizi per il corso di Algoritmi, anno accademico 2011/12

Cicli. S i a i = a 1 + a 2 + a a n

Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base

Transcript:

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 )