Algoritmi di ordinamento

Slides:



Advertisements
Presentazioni simili
Gli Algoritmi di ordinamento
Advertisements

Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Unità G3 Algoritmi notevoli. Ordinamento Un insieme di dati {a0, a1, a2, …, an} si dice ordinato in ordine crescente se a0 a1 a2 a3 … an I dati sono generalmente.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Ordinamento di una lista: bubble-sort
ESERCIZI.
ALGORITMI a.
Algoritmi di Ordinamento
ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili.
GLI ALGORITMI VISIBILE SUL BLOG INFORMATICA ANNO SCOLASTICO 2013 / 2014 GABRIELE SCARICA 2°T.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Lo strano mondo degli algoritmi di ordinamento Algoritmi.
GLI ALGORITMI DI ORDINAMENTO
Ordinamento. Introduzione Una delle operazioni che si possono eseguire sui vettori, è quella di ordinare gli elementi del vettore in ordine crescente.
© 2015 Giorgio Porcu - Aggiornamennto 01/12/2015 I STITUTO T ECNICO SECONDO BIENNIO T ECNOLOGIE E P ROGETTAZIONE Rappresentazione dell’ Informazione Sistemi.
Prof.ssa Rossella Petreschi Lezione del 5/12/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 11 del testo Anany Levitin “The design.
1 Simulazione Numerica dei Fenomeni di Trasporto Necessità di introduzione dei tensori  11  12  13  23  21  22 Vogliamo descrivere in un modo che.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Progettare algoritmi veloci usando strutture dati efficienti
Tutorato Elementi di Informatica 2013
Ordinamento.
Richiami di Algebra Matriciale
9. Problemi ricorrenti: ordinamento e ricerca
Divide et Impera Quicksort Mergesort Charles Antony Richard Hoare
Lezione n°17 Prof.ssa Rossella Petreschi
Excel 1 - Introduzione.
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Informatica per l’Ingegneria
8b. Esempi di algoritmi con l’uso di array: ordinamento e ricerca
Process synchronization
Algoritmi e Strutture Dati
Divide et Impera Quicksort Mergesort
Quick Sort: Esempio Si consideri il seguente vettore, v, di n=10 elementi: i=inf j=sup Scegliamo come pivot.
Richiami di Algebra Matriciale
Il sistema di numerazione decimale
Impariamo a conoscere le Matrici
32 = 9 x2 = 9 x = 3 32 = 9 √9 = 3 L’estrazione di radice
Scrivere programmi corretti
Ordinamento in tempo lineare
I Polinomi potenziamento
Semirette e segmenti.
Schema generale, visita in ampiezza e profondità.
Process synchronization
Algoritmi e Strutture Dati
Backtracking Lezione n°13 Prof.ssa Rossella Petreschi
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Progettare algoritmi veloci usando strutture dati efficienti
APPUNTI SUL LINGUAGGIO C
L’algoritmo MergeSort
* 07/16/96 Sez. 2: Ordinamento La consultazione di banche dati è sempre più cruciale in tutte le applicazioni dell’Informatica. Se vogliamo consultare.
APPUNTI SUL LINGUAGGIO C Esercizi sugli array e strutture
comprensione e modifica di codice
Backtracking Lezione n°17 Prof.ssa Rossella Petreschi
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
Programmazione e Laboratorio di Programmazione
MergeSort Usa la tecnica del divide et impera:
Programmazione e Laboratorio di Programmazione
Process synchronization
Process synchronization
Ricerca 01/08/2019 package.
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Corso di Fondamenti di Informatica
Script su vettori Realizza uno script che chiede in input una dimensione d e crea un vettore di d numeri interi casuali. Poi calcola la somma dei due numeri.
Corso di Fondamenti di Informatica
Programmazione e Laboratorio di Programmazione
Corso di Fondamenti di Informatica
Transcript della presentazione:

Algoritmi di ordinamento di un vettore

Ordinare un vettore significa ridisporre i suoi elementi in modo tale che siano ordinati tra di loro (l’ordinamento più comune è per valore crescente) 5 33 23 17 6 9 81 3 j i Confronto a due a due tutte le coppie del vettore e,se non sono ordinate tra loro, le scambio.

function Vordinato = ordinamento (V) len=length(V); for i=1:len-1 Ordinare un vettore significa ridisporre i suoi elementi in modo tale che siano ordinati tra di loro (l’ordinamento più comune è per valore crescente) function Vordinato = ordinamento (V) len=length(V); for i=1:len-1 for j=i+1:len if V(i)>V(j) temp=V(i); V(i)=V(j); V(j)=temp; end Vordinato=V; X=uint32(rand(1,50)*100); Ordinamento(X);

SELECTION SORT INSERTION SORT Algoritmi “incrementali” Estende progressivamente una sottosequenza ordinata finchè tutto il vettore diventa ordinato BUBBLE SORT Si basa su più “scansioni” del vettore Scambia elementi vicini finchè tutto il vettore è ordinato

SELECTION SORT SELECTION SORT 9 8 9 8 1 2 3 4 5 6 7 9 8 1 2 3 4 5 6 7 9 8 Supponiamo che i primi k elementi del vettore siano ordinato, Es k=3 Come possiamo estendere l’ordinamento all’ elemento k+1 ? Selection sort: prendi il minimo tra gli n-k elementi rimanenti e spostalo nella posizione k+1 (con uno scambio)

SELECTION SORT 9 8 n = lunghezza del vettore, k all’inizio vale 1 2 3 4 5 6 7 9 8 n = lunghezza del vettore, k all’inizio vale 1 1.Prendi l’elemento in posizione k dove k-1 è il numero di elementi già ordinati 2.Trova il minimo tra gli n-k+1 elementi non ordinati 3.Scambia l’elemento in posizione k col minimo trovato 4. Aumenta k di 1 5.Se k < n torna al passo 1 Fine

7 7 7 7 7 7 Come funziona l’algoritmo SELECTION SORT: k=1 k=2 k=3 k=4 5 6 7 k=1 1 2 3 4 5 6 7 k=2 1 2 3 4 5 6 7 k=3 1 2 3 4 5 6 7 k=4 1 2 3 4 5 6 7 k=5 1 2 3 4 5 6 7 k=6

1 If m~=i

Esercizio: Modificare il codice in modo da visualizzare il numero di confronti e il numero di scambi effettuati

INSERTION SORT 1 2 3 4 5 6 7 9 8 1 2 3 4 5 6 7 9 8 Supponiamo che i primi k elementi del vettore siano ordinati, Es k=4 Come possiamo estendere l’ordinamento all’ elemento k+1 ? Selection sort: prendi l’elemento in posizione k+1 ed inseriscilo nella posizione corretta rispetto ai primi k elementi

INSERTION SORT 9 8 9 8 n = lunghezza del vettore, k all’inizio vale 2 1 2 3 4 5 6 7 9 8 1 2 3 4 5 6 7 9 8 n = lunghezza del vettore, k all’inizio vale 2 1.Prendi l’elemento in posizione k nel vettore 2.Trova la posizione per l’elemento k nella sottosequenza ordinata 3.Se la posizione per l’elemento k è minore di k, allora bisogna scalare alcuni elementi già ordinati 4. Aumenta k di 1 4.Se k < n torna al passo 1 Fine

7 7 7 7 7 7 Come funziona l’algoritmo INSERTION SORT: k=2 k=3 k=4 k=5 1 2 3 4 5 6 7 k=2 1 2 3 4 5 6 7 k=3 1 2 3 4 5 6 7 k=4 1 2 3 4 5 6 7 k=5 1 2 3 4 5 6 7 k=6 1 2 3 4 5 6 7 k=7

1 2 3 4 5 6 7 9 8

Esercizio: Modificare il codice in modo da visualizzare il numero di confronti e il numero di scambi effettuati

BUBBLE SORT 10 12 Si basa su più scansioni (scorrimenti) del vettore Durante ciascuno scorrimento, coppie di valori adiacenti non ordinate vengono scambiate Se durante una scansione non avviene nessuno scambio, il vettore è ordinato 1 2 3 4 5 6 7 10 12

Esercizio: Modificare il codice in modo da visualizzare il numero di confronti e il numero di scambi effettuati

ORDINAMENTO Modificare i tre algoritmi per l’ordinamento in modo da ordinare un vettore di 10 elementi in base al valore crescente dell’unità(cioè dell’ultima cifra a destra).

Esercizio: Atleta Lunedi Martedi Domenica 9 12 4 6.2 6.05 6.4 Realizza un programma in MatLab che consente di creare un report degli allenamenti di un atleta del salto in lungo. L’atleta si allena tutti i giorni provando a saltare ad una distanza di 6 metri, segnando le misure dei salti e ripetendo il salto finché questo riesce. Il report deve contenere Per ogni giorno della settimana: il giorno, il numero di salti e la distanza massima saltata. Lunedi Martedi Domenica 9 12 4 6.2 6.05 6.4

Esercizio: Atleta giorni={'Lunedi','Martedi','Mercoledi','Giovedi','Venerdi','Sabato','Domenica'}; numeroGiorni=length(giorni); allenamento={}; for i=1:numeroGiorni misuraSalto=0; numeroSalti=0; disp(giorni{i}); while misuraSalto<6 misuraSalto=input('Inserisci la misura del salto: '); numeroSalti=numeroSalti+1; end allenamento{i}={giorni{i} numeroSalti misuraSalto}; allenamento

giorni={'Lunedi','Martedi','Mercoledi','Giovedi','Venerdi','Sabato','Domenica'}; numeroGiorni=length(giorni); allenamento={}; for i=1:numeroGiorni vettoreMisure=[]; misuraSalto=0; numeroSalti=0; disp(giorni{i}); while misuraSalto<6 misuraSalto=input('Inserisci la misura del salto: '); vettoreMisure=[vettoreMisure misuraSalto]; end allenamento{i}={giorni{i} length(vettoreMisure) vettoreMisure}; allenamento migliori={}; migliorSalto=max(allenamento{i}{3}); allenamento{i}{3}=migliorSalto;

Esercizi: CON FUNZIONI PREDEFINITE E INDICIZZAZIONE MATLAB Generare un vettore di numeri casuali compresi tra 0 e 99; Contare quanti elementi sono maggiori del primo; Trovare la posizione del primo valore superiore al primo; Trovare la posizione dell’ultimo valore superiore al primo Generare un vettore di numeri casuali compresi tra -50 e 49; Contare quanti elementi sono maggiori della somma di tutti gli elementi; sostituire con 0 tali valori. CALCOLO DEL MINIMO Dato un vettore di 10 elementi, sostituire l’elemento con valore minimo con il valore della posizione che occupa. CALCOLO DEL MINIMO,MASSIMO E SCAMBIO - Dato un vettore di 10 elementi (riempito con valori random) scrivi un procedimento per scambiare di posto il valore minimo col valore massimo.

Generare un vettore di numeri casuali compresi tra 0 e 99; Contare quanti elementi sono maggiori del primo; Trovare la posizione del primo valore superiore al primo; Trovare la posizione dell’ultimo valore superiore al primo Generare un vettore di numeri casuali compresi tra -50 e 49; Contare quanti elementi sono maggiori della somma di tutti gli elementi; sostituire con 0 tali valori. SOLUZIONI ESERCIZI CON FUNZIONI PREDEFINITE E INDICIZZAZIONE V=floor(100*rand(1,10)) sum(V>V(1)) min(find(V>V(1))) max(find(V>V(1))) V=floor(-50+100*rand(1,10)) sum(V>sum(V)) V(find(V>sum(V)))=0

Dato un vettore di 10 elementi, sostituire l’elemento con valore minimo con il valore della posizione che occupa. SOLUZIONE ESERCIZI SUL CALCOLO DEL MINIMO V = floor(50*rand(1,10)); disp(V); pos=1; for i=1:length(V) if V(i)<V(pos) pos=i; end V(pos)=pos;

Esercizio: Generare una matrice 5x5 contenente zeri. Generare un vettore di 5 elementi random compresi tra 0 e 49 Riempire le righe della matrice con il contenuto del vettore: in ciascuna riga il contenuto del vettore sarà «ruotato» di 0,1,2,3 e 4 posizioni verso sinistra 34 6 12 11 40 34 6 12 11 40