28 ottobre 20031 Mergesort F. Bombi 28 ottobre 2003.

Slides:



Advertisements
Presentazioni simili
INFORMATICA Algoritmi fondamentali
Advertisements

I. C. Salvo D'Acquisto Scuola in Ospedale a. s. 2002/20031 INDAGINE SUL GRADO DI SODDISFAZIONE DEI GENITORI E DEGLI ALUNNI PER IL SERVIZIO EROGATO DALLA.
                      Insertion-Sort
Argomenti della lezione
Corso di Laurea Triennale in Ingegneria Gestionale Corso di Fondamenti di informatica A. A A.Pinto Algoritmi di ricerca 1.
Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante
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.
Algoritmi notevoli In linguaggio C.
Grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 2 Copyright © The McGraw.
Lez. 10a1 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per.
Algoritmi in C++ (1) da completare
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Heap Sort. L’algoritmo heap sort è il più lento di quelli di ordinamento O(n * log n) ma, a differenza degli altri (fusione e quick sort) non richiede.
PROGRAMMI DI RICERCA E ORDINAMENTO
Mergesort1 if (n>1) /* la collezione contiene almeno due elementi. */ {1. Dividi la collezione in due di circa la metà degli elementi. 2. chiamata ricorsiva.
Esercizi di esonero (a.a. 2007/2008) Compito C, terzo esercizio Data una sequenza di caratteri s1 ed una stringa s2 diciamo che s1 è contenuta in s2 se.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Corso di Informatica (Programmazione)
CORSO DI PROGRAMMAZIONE II
Algoritmi e Strutture Dati III. Algoritmi di Ordinamento
Modelli e Algoritmi per la Logistica
Progetto di algoritmi: metodologia "Divide et Impera"
Algoritmi di ordinamento
Funzioni di Libreria per le stringhe DICHIARAZIONI CONTENUTE NEL FILE: char *strcpy( char *dest, const char *sorg ); Copia sorg in dest, incluso il carattere.
07/04/2003Algoritmi Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure.
Lalgoritmo MergeSort Applica la strategia del divide et impera Divide: suddivide la sequenza di n elementi data in due sottosequenze di n/2 elementi Impera:
Esercizi C su array e matrici
Fondamenti di Informatica1 Ripetizioni di segmenti di codice Spesso è necessario ripetere più volte uno stesso segmento dell'algoritmo (e.g. I/O, elaborazioni.
Sorting: MERGESORT Vogliamo ordinare lista (a 1,…,a n ). 1.Dividi lista in 2 sottoliste aventi (quasi) la stessa dimensione: (a 1,a 3,a 5,…) e (a 2,a 4,…),
Programmazione in Java Claudia Raibulet
Algoritmi e Strutture Dati 8 crediti Calendario: 1 Ott. – 6 Dic. Aula: LuM250 Orario: Lun, Mar, Mer, Gio Giorni di lezione disponibili 40 ~48.
30 ottobre Mergesort F. Bombi 30 ottobre 2002.
Algoritmi e strutture dati
void binario(int n); …………………
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl.
Analisi di un algoritmo
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 17/04/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come affrontare un problema… Marco D. Santambrogio – Ver. aggiornata al 18 Ottobre.
Le eccezioni F. Bombi 01/11/ Errori e situazioni impreviste situazioni eccezionali In un programma situazioni eccezionali possono.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Tipi parametrici Collezioni generiche. Strutture matematiche parametriche.
Teoria degli algoritmi e della computabilità Terza giornata: Ricerca e ordinamento ottimi. P vs NP, algoritmi di approssimazione, e il potere della randomizzazione.
Algoritmo che viene utilizzato per elencare gli elementi di un insieme secondo una sequenza stabilita da una relazione d'ordine, in modo che ogni elemento.
Algoritmi di Ordinamento
Algoritmi CHE COS’è UN ALGORITMO di ORDINAMENTO?
ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili.
Array (ordinamento) CORDA – Informatica A. Ferrari.
s STRINGHE DI CARATTERI a p e \0
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come affrontare un problema… Marco D. Santambrogio – Ver. aggiornata al 21 Agosto.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Ordinare F. Bombi Liste ordinate Una lista di n oggetti confrontabili (a 0, a 1, a 2, … a n-1 ) si dice ordinata quando a i.
ALGORITMO Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un formalismo che permette di rappresentare.
Introduzione agli algoritmi e strutture dati 2/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2005 – The McGraw-Hill Companies srl.
GLI ALGORITMI VISIBILE SUL BLOG INFORMATICA ANNO SCOLASTICO 2013 / 2014 GABRIELE SCARICA 2°T.
Definizione di algoritmo: Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
CORSO DI PROGRAMMAZIONE II
Lo strano mondo degli algoritmi di ordinamento Algoritmi.
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
Problema dell’Ordinamento. Problema dell’ordinamento Formulazione del problema –Si vuole ordinare una lista di elementi secondo una data proprietà P Esempio:
L’ALGORITMO Un algoritmo è un procedimento formale che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile mediante.
Capitolo 4 Ordinamento: lower bound Ω(n log n) e MergeSort ((*) l’intera lezione) Algoritmi e Strutture Dati.
Divide et Impera Parte 11 - Risoluzione di problemi per divisione in sottoproblemi “bilanciati” Corso A: Prof. Stefano Berardi
6/11/01Ordinamento 1 Un esempio di algoritmi: ordinamento.
8. Problemi ricorrenti: ordinamento e ricerca Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Ottobre.
L’algoritmo MergeSort
Transcript della presentazione:

28 ottobre Mergesort F. Bombi 28 ottobre 2003

2Lalgoritmo Lalgoritmo di ordinamento mergesort o per fusione è un algoritmo efficiente in quanto ha una complessità temporale O(nlog(n)) e può essere utilizzato per ordinare un vettore di oggetti Comparable oppure una lista o sequenza Lalgoritmo si basa sullesistenza di un algoritmo efficiente in grado di fondere due vettori (o due liste) ordinate in un vettore (o in una lista) ordinata in un tempo O(n+m) essendo n ed m la lunghezza dei due vettori

28 ottobre Per ordinare un vettore Dividere il vettore s d c s1d1s2d2

28 ottobre private void merge (int s1, int d1, int s2, int d2) { int i = s1; int j = s1; while (s1 <= d1 && s2 <= d2) if (v[s1].compareTo(v[s2]) < 0) tmp[i++] = v[s1++]; else tmp[i++] = v[s2++]; while (s1 <= d1) tmp[i++] = v[s1++]; while (s2 <= d2) tmp[i++] = v[s2++]; for (; j <= d2; j++) v[j] = tmp[j]; } Fusione di due array

28 ottobre 20035Analisi Ogni operazione elementare richiede un tempo costante, alla fine la lista l avrà una lunghezza pari a n+m e di conseguenza le operazioni necessarie sono n+m e quindi lalgoritmo ha una complessità O(n+m) Il numero di confronti necessari è al minimo pari a n (oppure a m ) se una delle due liste è composta da elementi minori degli elementi dellaltra lista, è invece O(n+m) se gli elementi delle due liste sono intercalati Lalgoritmo può essere usato per fondere due vettori parzialmente riempiti in un vettore ordinato con efficienza analoga, si utilizzeranno tre cursori per tenere traccia della posizione della testa dei due vettori dorigine e della posizione della coda nel vettore risultato

28 ottobre Per ordinare un vettore Fondere due vettori 214 s1 d1 s2 d2 Vettore temporaneo

28 ottobre 20037Ordinare Sia v larray da ordinare Siano i e s i cursori che definiscono inizio e fine dellarray se larray ha lunghezza > 1 dividere larray in due metà individuate da i1, s1 e i2, s2 ordinare ricorsivamente da i1 a s1 ordinare ricorsivamente da i2 a s2 fondere le due parti dellarray NB: il caso base si ha quando larray ha lunghezza 0 o 1

28 ottobre private Comparable[] v; Private Comparable[] tmp; private int n; public void ordina () { if (n > 1) { tmp = new Comparable[n]; ms(0, n-1); } private void ms (int s, int d) { int c = (s + d)/2; if (s < c) ms(s, c); if (c+1 < d) ms(c+1, d); merge(s, c, c+1, d); } NB: il codice effettua le chiamate ricorsive solo per array di lunghezze maggiore di 1

28 ottobre , 7, 6, 5, 4, 3, 2, 1 8, 7, 6, 54, 3, 2, 1 8, 76, 54, 32, , 8 5, 6 3, 4 1, 2 5, 6, 7, 81, 2, 3, 4 1, 2, 3, 4, 5, 6, 7, 8 Albero delle chiamate ricorsive per un array di 8 elementi

28 ottobre Analisi di mergesort Vogliamo dimostrare che mergesort ha una complessità temporale O(n log(n)) Supponiamo che ogni operazione sugli array richieda un tempo costante Per semplicità supponiamo anche che la lunghezza n dellarray da ordinare sia una potenza di 2 e quindi si possa dire che n = 2 k Analizziamo il tempo in funzione di k

28 ottobre A meno di costanti (inessenziali nella valutazione del comportamento asintotico dellalgoritmo) possiamo dire che: T(k) = 2 T(k-1) + 2 k T(0) = 1 La ricorrenza ha come soluzione T(k) = (k+1)2 k Infatti questo è vero per k = 0, supponendo che sia vero per un valore qualsiasi di k= k avremo che T(k) = (k+1) 2 k

28 ottobre Dobbiamo dimostrare che è vero T(k+1) = (k+1+1)2 k+1 Infatti dalla ricorrenza iniziale abbiamo: T(k+1) = 2 T(k+1-1) + 2 k+1 Dallipotesi fatta per k = k si ha: T(k+1) = 2(k+1)2 k + 2 k+1 E quindi: T(k+1) = (k+1+1)2 k+1 Che era quanto volevamo dimostrare Ora dato che k=log(n) abbiamo che T(n) = n(log(n)+1) = O(n log(n))