Il problema dell'ordinamento. Algoritmi e Laboratorio a.a Lezioni. Proprietà degli algoritmi di ordinamento: stabilità.

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Il problema dell'ordinamento. Algoritmi e Laboratorio a.a Lezioni. Proprietà degli algoritmi di ordinamento: stabilità."

Transcript

1 Il problema dell'ordinamento Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a Lezioni prof. Elio Giovannetti Parte 22 Riassunto algoritmi di ordinamento. Ordinamento lineare. Data una sequenza (ad es. array o lista) di elementi, ordinarla rispetto ad una relazione d'ordine definita sugli elementi (di solito su un particolare campo o componente di tali elementi); ad es. ordinare un insieme di oggetti di una classe Studente rispetto al numero di matricola (costituente la chiave identificativa dell'oggetto), oppure rispetto al cognome, ecc. Gli algoritmi che risolvono tale problema, cioè gli algoritmi di ordinamento, sono classificabili secondo diversi criteri, quali la complessità asintotica oppure il fatto che godano o no di certe proprietà interessanti. Quest' opera è pubblicata sotto una Licenza Creative Commons Attribution-NonCommercial-ShareAlike /02/2007 E. Giovannetti - AlgELab Lez.22 2 Proprietà degli algoritmi di ordinamento: stabilità. Un algoritmo di ordinamento si dice stabile se non altera l'ordine relativo di oggetti distinti che sono uguali rispetto alla relazione d'ordine, ad es. l'ordine relativo di elementi con chiavi uguali. Cioè, se nella sequenza da ordinare vi sono due elementi A e B di uguali chiavi, e A si trova prima di B in tale sequenza, anche nella sequenza ordinata A deve trovarsi prima di B. Se una sequenza di elementi già ordinata secondo un certo criterio viene ordinata secondo un altro criterio per mezzo di un algoritmo stabile, elementi uguali secondo il nuovo criterio risultano ordinati secondo il precedente criterio. Esempio: Se una sequenza di persone individuate da nome e cognome è ordinata per nome, ordinandola per cognome con un algoritmo stabile si ottiene una sequenza in cui le persone dello stesso cognome sono ordinate per nome. 19/02/2007 E. Giovannetti - AlgELab Lez.22 3 Stabilità Naturalmente la stabilità non ha alcuna importanza se gli elementi coincidono con le chiavi o, più in generale, se elementi uguali rispetto alla relazione d'ordine non sono distinguibili (ad esempio un array di interi). 19/02/2007 E. Giovannetti - AlgELab Lez.22 4 Proprietà degli algoritmi di ordinamento: ordinamento sul posto (in place, in loco) Un algoritmo di ordinamento su array si dice sul posto (o in loco, o in place) se in ogni istante al più un numero costante di elementi viene memorizzato al di fuori dell'array; cioè se l'algoritmo riordina l'array senza usare un array ausiliario o comunque uno spazio proporzionale al numero di elementi. Definizione di fatto equivalente: Un algoritmo di ordinamento si dice sul posto se la sua complessità spaziale è al più O(log n). Ricorda che la complessità spaziale comprende anche lo spazio usato dallo stack. Concludendo: un algoritmo di ordinamento è sul posto se usa solo una quantità "piccola" di spazio aggiuntivo. 19/02/2007 E. Giovannetti - AlgELab Lez.22 5 Classificazione degli algoritmi di ordinamento selection sort:sul posto, anzi spazio O(1); non stabile; tempo O(n 2 ) in tutti i casi; insertion sort: sul posto, anzi spazio O(1); stabile; tempo O(n 2 ) nei casi peggiore e medio, O(n) nel caso migliore; mergesort: non sul posto, spazio O(n); stabile; tempo O(n log n) nei casi peggiore e medio; quicksort: sul posto, spazio O(log n); non stabile; tempo O(n 2 ) nel caso peggiore, O(n log n) nei casi migliore e medio; heapsort: sul posto, anzi spazio O(1); non stabile; tempo O(n log n) in tutti i casi; Nota: il mergesort è stabile purché implementato opportunamente; ne esiste anche una versione sul posto, estremamente complicata e poco usata. 19/02/2007 E. Giovannetti - AlgELab Lez

2 Esercizio 1. Spiegare perché il selection sort, il quicksort e lo heapsort non sono stabili. Spiegare perché l'insertion sort è stabile. Spiegare perché il mergesort non è sul posto, mentre tutti gli altri dell'elenco lo sono. Spiegare in che modo deve essere realizzato il mergesort affinché esso sia stabile. Algoritmi di ordinamento non basati sui confronti: ordinamento in tempo lineare. 19/02/2007 E. Giovannetti - AlgELab Lez /02/2007 E. Giovannetti - AlgELab Lez.22 8 Problema 1.1: ordinare un array di n elementi aventi chiavi intere tutte diverse comprese fra 0 e n-1. Riprendiamo un esempio illustrato nella Lezione 10, slide 3. Si vuole ordinare un array di 50 oggetti "Articolo" distinti, contenenti ciascuno un numero di codice da 0 a 49 (articoli distinti hanno codici distinti). Per farlo è sufficiente: disporre di un array ausiliario b della stessa lunghezza; percorrere l'array di partenza andando a mettere nell'array ausiliario ogni elemento al suo posto, cioè l'articolo di codice h nell'elemento b[h]; ovviamente ciò richiede un tempo Θ(n); l'ordinamento è stato effettuato senza operare nessun confronto. 19/02/2007 E. Giovannetti - AlgELab Lez.22 9 Problema 1.2: ordinare un array di n elementi aventi chiavi intere senza ripetizioni e comprese nel range m.. m+n-1 (con m intero) Vogliamo ordinare per numero di matricola un array di 1000 studenti di matricola compresa nel range (con matricole non duplicate). È sufficiente: disporre di un array ausiliario b di 1000 elementi percorrere l'array di partenza andando a mettere nell'array ausiliario ogni elemento al suo posto, cioè l'articolo di codice h nell'elemento b[h-42000]; ovviamente ciò richiede un tempo Θ(n); l'ordinamento è stato effettuato senza operare nessun confronto. 19/02/2007 E. Giovannetti - AlgELab Lez Problema 2: ordinare un array contenente la sequenza degli n interi compresi fra m ed m+n-1. Vogliamo ordinare una sequenza di 1000 elementi costituiti da interi "nudi" compresi fra e 42999, senza elementi ripetuti. Per elemento intero "nudo" intendiamo un elemento costituito da un semplice intero senza altri dati ad esso associati. Elementi di chiavi uguali sono quindi identici (indistinguibili). In tal caso non serve alcun array ausiliario, anzi non serve neppure conoscere l'array di input! Basta semplicemente riempire ordinatamente l'array con tutti i numeri compresi fra e 42999: for(int i = 0; i < 1000; i++) a[i] = i; È ovviamente T(n) = Θ(n). 19/02/2007 E. Giovannetti - AlgELab Lez Problema 3 integer sort: ordinare un array di n interi compresi nel range 0.. k-1, con possibili ripetizioni. Nota: Se è n > k, vi sono sicuramente elementi ripetuti. Anche in questo caso non serve un array ausiliario per il risultato, ma per ognuno dei k possibili valori bisogna contare il numero di volte in cui tale valore compare nell'array. Occorre quindi un array ausiliario di contatori, di lunghezza k. Si percorre una volta l'array da ordinare A, incrementando, per ogni elemento A[i], il contatore C[A[i]] corrispondente a quell'elemento. Si percorre l'array dei contatori, depositando nell'array da ordinare il numero corretto di elementi uguali a ciascuno dei k valori. 19/02/2007 E. Giovannetti - AlgELab Lez

3 Integer sort: realizzazione public static void intsort(int k, int[] a) { int[] counters = new int[k]; // contatori int n = a.length; // inizializzo a zero i contatori (in Java non necessario): for(int i=0; i < k; i++) counters[i] = 0; //se a[j] contiene il valore v, incremento il v-esimo contatore for(int j=0; j < n; j++) counters[a[j]]++; int j = 0; // per ogni valore v,... for(int v = 0; v < k; v++) { while(counters[v] > 0) { a[j] = v; j++; counters[v]--; //... metto in a tanti valori uguali a v quanti ne sono stati contati in counters[v] 19/02/2007 E. Giovannetti - AlgELab Lez Analisi Primo for (inizializzazione contatori): k passi. Secondo for (conteggio valori): n passi Terzo for con while annidato: in tutto n passi In totale si hanno quindi 2n + k iterazioni: tempo =Θ(n+k) 19/02/2007 E. Giovannetti - AlgELab Lez Problema 4: ordinare un array di n elementi aventi chiavi intere comprese nel range 0.. k-1 (le chiavi possono essere ripetute) Come nel problema 3, per ogni possibile valore j della chiave bisogna contare quanti sono nell'array di partenza gli elementi di chiave uguale a j. Poiché però ora elementi aventi chiavi uguali contengono anche altri dati (in generale distinti): un elemento non può essere messo nel suo nuova posto sovrascrivendo l'elemento ivi inizialmente presente: bisogna quindi usare un array ausiliario per il risultato; nello stesso tempo, gli elementi di ciascuna chiave j devono essere presi dall'array di partenza. L'algoritmo diventa più sofisticato (vedi slide seguente). Counting sort Ordina un array di n elementi aventi chiavi intere comprese fra 0 e k-1. Vi sono in tutto 3 arrays: a: array di input da ordinare, di dimensione n; b: array ausiliario in cui mettere il risultato, di dimensione n; c: array dei contatori, di dimensione k; static void countsort(int k, ItemWithIntKey[] a) { dove ItemWithIntKey è una classe di oggetti dotati di un metodo che restituisce una chiave di tipo intero; for(int j = 0; j < k; j++) c[j] = 0; azzero i contatori (in Java si può omettere) Il seguito della procedura può essere scritto in due versioni leggermente diverse ma equivalenti. 19/02/2007 E. Giovannetti - AlgELab Lez /02/2007 E. Giovannetti - AlgELab Lez Versione 1 Per ogni j, metto in c[j] il numero di elementi di chiave uguale a j: for(int i = 0; i < n; i++) c[a[i].key()]++; Per ogni j, calcolo e metto in c[j] il numero degli elementi di chiave < j, nel modo seguemte: INVARIANTE: totale = numero di elementi di chiave < j Poiché non esistono elementi di chiave < 0, l'inizializzazione deve essere j = 0, totale = 0: int totale = 0; for(int j = 0; j < k; j++) { int temp = c[j];temp è il numero di elem. di chiave =j c[j] = totale; totale += temp; aggiorno totale aggiungendovi il vecchio c[j] salvato in temp. 19/02/2007 E. Giovannetti - AlgELab Lez Versione 1 (continua) A questo punto, per ogni j: c[j] = numero di elementi di chiave < j = indice del posto in cui mettere il primo elemento di chiave j. Allora, per ogni elemento a[i]: prendine la chiave: j = a[i].key(); guarda qual è la posizione in cui metterlo: i' = c[j]; mettilo in tale posizione: b[i'] = a[i]; incrementa l'indice i', perché il successivo elemento di chiave j andrà messo nella posizione successiva. Concisamente: for(int i = 0; i < n; i++) { b[c[a[i].key()]] = a[i]; c[a[i].key()]++; 19/02/2007 E. Giovannetti - AlgELab Lez

4 Versione 1 (continua) Osservazioni È un algoritmo di ordinamento stabile, perché il primo degli elementi di chiave j nell'array a viene messo al primo posto fra gli elementi di chiave j nell'array b, il secondo nel secondo, e così via. L'algoritmo evidentemente può, con una banale variazione, trattare il caso in cui le chiavi sono comprese in un range di valori non iniziante da zero (cioè da m a m+k-1, con m 0) 19/02/2007 E. Giovannetti - AlgELab Lez Versione 2 per ogni j, metto in c[j] il numero di elementi di chiave uguale a j: for(int i = 0; i < n; i++) c[a[i].key()]++; faccio diventare c[0] l'indice a cui mettere l'ultimo elemento di chiave 0: c[0]--; faccio diventare c[j] l'indice a cui mettere l'ultimo elemento di chiave j: for(int j = 1; j < k; j++) c[j] += c[j-1]; a questo punto si ha, per ogni j: c[j] new = c[0] old + c[1] old c[j] old = = indice del posto in cui mettere l'ultimo elemento di chiave j; per ottenere un ordinamento stabile bisogna percorrere l'array di input dalla fine verso l'inizio: for(int i = n-1; i >= 0; i--) { b[c[a[i].key()]] = a[i]; c[a[i].key()]--; Alla fine di entrambe le versioni si può ricopiare l'array ausiliario b nell'array di partenza a, in modo che la procedura abbia la forma e funzionalità usuali delle procedure di ordinamento. 19/02/2007 E. Giovannetti - AlgELab Lez Complessità (per entrambe le versioni) Complessità temporale eventuale ciclo for che inizializza i contatori: k passi; ciclo for che conta gli elementi: n passi; ciclo for che somma i contatori: k passi; ciclo for che mette gli elementi in b in ordine: n passi; eventuale ciclo for che ricopia b in a: n passi. Quindi: T(n, k) = Θ(n+k) Se k è dello stesso ordine di grandezza di n, si ha: T(n) = O(n) (complessità lineare). Complessità spaziale L'algoritmo utilizza due array ausiliari: b di lunghezza n e c di lunghezza k. Quindi anche lo spazio è lineare: S(n, k) = Θ(n+k) Se l'insieme delle possibili chiavi è molto grande l'algoritmo non è usabile: troppo dispendioso in spazio e in tempo. 19/02/2007 E. Giovannetti - AlgELab Lez Esempio Si può usare il counting sort per ordinare una sequenza di stringhe? Una stringa non è un numero, ma può essere identificata con il numero intero costituito dalla sua rappresentazione binaria (per mezzo dei codici ASCII o Unicode). Assumiamo che le stringhe che si vogliono ordinare abbiano una lunghezza massima di 20 caratteri. Quante sono le diverse possibili stringhe di lunghezza 20 su un alfabeto di 26 caratteri? Risposta: > (2 10) 20 = = (2 10 ) ~ = sarebbe necessario allocare un array c di giga elementi (che tra l'altro resterebbe poi quasi tutto vuoto...). Impossibile! 19/02/2007 E. Giovannetti - AlgELab Lez Bucket sort (ordinamento "a secchielli") Risolve lo stesso problema del counting sort: ordinare un array di n elementi aventi chiavi intere comprese fra 0 e k-1 (o fra m ed m+k-1). Opera come l'integer sort e il counting sort, mantenendo però un array di liste ("secchielli") anziché di contatori. La j-esima lista, buckets[j], conterrà gli elementi con chiave uguale a j. Alla fine si concatenano le liste in una lista-risultato, o le si ricopia in un array. Complessità: Θ(n+k). Poiché utilizza liste concatenate, è un algoritmo conveniente quando la sequenza è già rappresentata da una linked list; nel caso di array, invece, è di solito meglio il counting sort o l'integer sort. 19/02/2007 E. Giovannetti - AlgELab Lez Esercizio 2 Si completino e si provino le realizzazioni del counting sort. Si realizzino e si provino due versioni del bucket sort: una per ordinare liste concatenate, l'altra per ordinare arrays. Come bisogna fare affinché il bucket sort sia stabile? 19/02/2007 E. Giovannetti - AlgELab Lez

5 Ordinamento in base ad una tupla di chiavi. Si supponga di voler ordinare in base a cognome, nome, e anno di nascita una sequenza di record od oggetti rappresentanti persone, in modo che l'ordine sia (alfabetico) per cognome, a parità di cognome sia per nome, e a parità di nome per anno di nascita. Si può operare in modi diversi: Definire una funzione di confronto che confronta dapprima i cognomi, se questi sono uguali confronta i nomi, e così via. Ordinare dapprima per cognome mettendo gli elementi con cognomi uguali in liste separate, poi ordinare per nome ogni lista di cognomi uguali, e così via. Ordinare dapprima tutta la sequenza per anno di nascita; poi riordinarla per nome con un algoritmo stabile; infine riordinarla per cognome con un algoritmo stabile. Poiché un algoritmo stabile preserva l'ordine precedente, alla fine gli elementi risulteranno ordinati nel modo voluto! 19/02/2007 E. Giovannetti - AlgELab Lez Radix sort Ordina una sequenza di elementi con chiavi composte da coppie (o d-tuple) di valori compresi in un range limitato, per mezzo del terzo metodo illustrato nel lucido precedente e usando il counting sort o il bucket sort come algoritmo di ordinamento stabile. Il numero totale di iterazioni è quindi d(n + k), con d costante. Si ha quindi ancora complessità temporale lineare: T(n, k) = Θ(n+k) Naturalmente se d non è molto piccolo (cioè di poche unità), la costante moltiplicativa influenza pesantemente l'efficienza. 19/02/2007 E. Giovannetti - AlgELab Lez Esempio: ordinamento lineare su chiavi intere. Vogliamo realizzare un algoritmo di ordinamento lineare per array di elementi aventi chiavi di tipo intero a 32 bit (come il tipo int di Java). Si può allora: scomporre il campo di tipo int in due campi di 16 bit; ordinare due volte l'array con il counting sort: prima rispetto ai 16 bit meno significativi; poi rispetto ai 16 bit più significativi. Oppure: scomporre il campo di tipo int in 4 campi di 8 bit (bytes); ordinare quattro volte l'array con il counting sort: prima rispetto al byte più basso; poi rispetto al secondo byte dal basso; e così via. La seconda soluzione occupa meno spazio (i contatori sono 2 8 invece di 2 16 ) ma ripete il counting sort 4 volte invece di 2. 19/02/2007 E. Giovannetti - AlgELab Lez Ordinamento lineare su chiavi intere (continua) Poiché nel counting sort le chiavi devono essere interi non negativi, i campi a 16 o a 8 bit in cui si scompone un valore int devono essere di tipo intero assoluto (unsigned). In Java il solo tipo intero assoluto è il tipo char a 16 bit. Quindi, attenzione: solo int non negativi: i due campi da 16 bit sono proprio i 16 bit rispettivamente più alti e più bassi del campo int; in Java, se x è un int, usando l'operatore >> di shift: x basso = (char) x x alto = (char) (x >> 16) int anche negativi: bisogna tener conto della rappresentazione binaria in complemento a 2 dei numeri negativi; in Java, se x è un int: x basso = (char) x x alto = (char) ((x >> 16)^0x8000) (vedi esercizio 3) 19/02/2007 E. Giovannetti - AlgELab Lez Ordinamento lineare di int non negativi in Java Definiamo una funzione che da un numero di tipo int estrae i 16 bit bassi o alti, a seconda del valore 0 o 1 di un altro parametro: static char mask(int m, int x) { if(m == 0) return (char) x; // bit bassi else return (char) (x >> 16); // bit alti Definiamo una procedura di counting sort parametrica che ordina sui 16 bit inferiori o superiori: static void countsort(int k, int[] a, int subfield) { for(int i = 0; i < n; i++) c[mask(subfield, a[i])]++; c[mask(subfield, a[i])]... eccetera Definiamo infine la procedura radixsort che richiama due volte il counting sort: public static void radsort(int[] a) { countsort(0x10000, a, 0); countsort(0x10000, a, 1); dove 0x10000 è, in esadecimale, il numero 16 4, cioè 2 16 (il valore di k). 19/02/2007 E. Giovannetti - AlgELab Lez Ordinamento lineare di int non negativi in Java Se vogliamo invece effettuare la scomposizione in bytes, la funzione di estrazione potrebbe essere: static char mask(int m, int x) { switch(m) { case 1: break; case 2: x >>= 8; break; case 3: x >>= 16; break; case 4: x >>= 24; break; return (char) (x & 0xFF); (usiamo ancora il tipo char poiché in Java non esiste un tipo unsigned byte) Eccetera. 19/02/2007 E. Giovannetti - AlgELab Lez

6 Esercizio 3 Esercizio 3.1. Si completi la procedura di radix sort per interi non negativi con scomposizione in due campi da 16 bit. Si realizzi la procedura di radix sort per interi non negativi con scomposizione in bytes. Utilizzando array casuali di grandi dimensioni, si confrontino sperimentalmente tali due procedure con il quicksort, in modo da stabilire quale di esse è migliore, e in quali situazioni il radix sort batte il quicksort. Esercizio 3.2 (facoltativo). Si realizzi una procedura di radix sort per int con segno. La difficoltà è stabilire come estrarre i campi da 16 bit: ripassare la rappresentazione in compl. a due (Architetture). 19/02/2007 E. Giovannetti - AlgELab Lez

Classificazione degli algoritmi di ordinamento. Algoritmi e Laboratorio a.a Lezioni. Esercizio 1. Si può fare meglio?

Classificazione degli algoritmi di ordinamento. Algoritmi e Laboratorio a.a Lezioni. Esercizio 1. Si può fare meglio? Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2009-10 Lezioni prof. Elio Giovannetti Lezione 24 Algoritmi di ordinamento

Dettagli

Algoritmi e Laboratorio a.a Lezioni. prof. Elio Giovannetti

Algoritmi e Laboratorio a.a Lezioni. prof. Elio Giovannetti Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2005-06 Lezioni prof. Elio Giovannetti Parte 7 Algoritmi di ordinamento

Dettagli

Dallo heap per la coda con priorità a un nuovo algoritmo di ordinamento. Algoritmi e Laboratorio a.a Lezioni. I due cicli dell'algoritmo

Dallo heap per la coda con priorità a un nuovo algoritmo di ordinamento. Algoritmi e Laboratorio a.a Lezioni. I due cicli dell'algoritmo Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. -1 Lezioni prof. Elio Giovannetti Lezione Heapsort versione 11/11/

Dettagli

Dallo heap per la coda con priorità a un nuovo algoritmo di ordinamento. Algoritmi e Laboratorio a.a Lezioni

Dallo heap per la coda con priorità a un nuovo algoritmo di ordinamento. Algoritmi e Laboratorio a.a Lezioni Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 26-7 Lezioni prof. Elio Giovannetti Parte 21 Heapsort versione 2/2/27

Dettagli

Sommario. Algoritmi di ordinamento lineari: CountingSort. BucketSort. RadixSort

Sommario. Algoritmi di ordinamento lineari: CountingSort. BucketSort. RadixSort Sommario Algoritmi di ordinamento lineari:! CountingSort! BucketSort! RadixSort 1 Ordinamento in tempo lineare. Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, nel

Dettagli

Algoritmi di ordinamento (I parte)

Algoritmi di ordinamento (I parte) (I parte) Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Definizione formale del problema Input:! Una sequenza di n numeri Output:! Una permutazione

Dettagli

Calcolare x n = x x x (n volte)

Calcolare x n = x x x (n volte) Calcolare x n = x x x (n volte) Abbiamo bisogno di: una variabile ris in cui ad ogni iterazione del ciclo si ha un risultato parziale, e che dopo l ultima iterazione contiene il risultato finale; una variabile

Dettagli

Programmazione I - corso B a.a prof. Viviana Bono

Programmazione I - corso B a.a prof. Viviana Bono Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 15 Algoritmi su array: selection sort, insertion sort, fusione

Dettagli

I numeri rossi sulla Mole Antonelliana a Natale. Algoritmi e Laboratorio a.a Lezioni. Le regole della riproduzione dei conigli.

I numeri rossi sulla Mole Antonelliana a Natale. Algoritmi e Laboratorio a.a Lezioni. Le regole della riproduzione dei conigli. I numeri rossi sulla Mole Antonelliana a Natale Università di Torino acoltà di Scienze MN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 29- Lezioni prof. Elio

Dettagli

Programmazione in Java (I modulo)

Programmazione in Java (I modulo) Programmazione in Java (I modulo) Lezione 14: ALGORITMI di ordinamento di array RICERCA sequenziale e binaria Array bidimensionali (matrici) Passaggio di argomenti al main Operazioni su array Un array

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 4 Ordinamento Ordinamento Dato un insieme S di n oggetti presi da un dominio totalmente ordinato, ordinare S Esempi: ordinare una lista di nomi alfabeticamente, o un

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2009-10 Lezioni prof. Elio Giovannetti Lezione 7 Il problema della

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Capitolo 7 Algoritmi di ordinamento 7.1 Selection sort L algoritmo di ordinamento per selezione opera nel modo seguente: supponiamo che i primi k elementi siano ordinati; l algoritmo sceglie il minimo

Dettagli

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 Capitolo 4 Ordinamento: Selection e Insertion Sort Ordinamento Dato un insieme S di n elementi presi da un dominio totalmente ordinato, ordinare S in ordine non crescente o non

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati

Algoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati Passaggio dei parametri in Java Nel seguente esempio public class parametri2 public static void main(string args[]) int x = 1; int y; double d[] = new double[2]; d[0] = 25; y= metodo1(d, x); System.out.println("Il

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Programmazione I - corso B a.a prof. Viviana Bono

Programmazione I - corso B a.a prof. Viviana Bono Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 14 Array parzialmente riempiti. Algoritmi sugli array. Arrayparzialmente

Dettagli

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

Esercizi per il corso di Algoritmi, anno accademico 2011/12 Esercizi per il corso di Algoritmi, anno accademico 2011/12 Esercizi sulla Tecnica Divide et Impera N.B. Tutti gli algoritmi vanno scritti in pseudocodice (non in Java, nè in C++, etc. ). Di tutti gli

Dettagli

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 10 novembre 2010 1 La bandiera nazionale (problema 4.7 del libro di testo). Il problema della bandiera

Dettagli

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano. Usa la tecnica del divide et impera:

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano. Usa la tecnica del divide et impera: MergeSort Usa la tecnica del divide et impera: 1 Divide: dividi l array a metà 2 Risolvi i due sottoproblemi ricorsivamente 3 Impera: fondi le due sottosequenze ordinate 1 Esempio di esecuzione 7 2 4 5

Dettagli

Algoritmi di ordinamento: Array e ricorsione

Algoritmi di ordinamento: Array e ricorsione Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Indice Algoritmi di ordinamento: Insertion

Dettagli

Sommario. Un algoritmo di ordinamento di complessità lineare: CountingSort. [CLRS10] cap. 8 par.8.2

Sommario. Un algoritmo di ordinamento di complessità lineare: CountingSort. [CLRS10] cap. 8 par.8.2 Sommario Un algoritmo di ordinamento di complessità lineare: CountingSort [CLRS10] cap. 8 par.8.2!1 Ordinamento in tempo lineare. Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento

Dettagli

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE Prova di Algoritmi e s.d. (1o anno) 17 Settembre 2002 TESTO e RISPOSTE Esercizio 1 (punti 7 in prima approssimazione) Consideriamo alberi binari con insieme dei nodi NODI = N (l'insieme dei naturali).

Dettagli

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet   francesc Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc m.franceschet@unich.it Algoritmi e Strutture di Dati I 2 Problema dell ordinamento

Dettagli

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.200.2005/06 Prof. V.L. Plantamura Dott.ssa A. Angelini Ω (grande omega) Diciamo che T(n) = Ω (f(n)), - leggiamo T(n) ha complessità

Dettagli

Schema generale di un algoritmo divide-et-impera. Algoritmi e Laboratorio a.a Lezioni. Esempio: mergesort su array. Esempio: quicksort

Schema generale di un algoritmo divide-et-impera. Algoritmi e Laboratorio a.a Lezioni. Esempio: mergesort su array. Esempio: quicksort Schema generale di un algoritmo divide-et-impera Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2006-07 Lezioni prof.

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 4 Ordinamento: Quicksort (*) e metodi di ordinamento lineari Punto della situazione Problema dell ordinamento: Lower bound (n log n) Upper bound O(n log n) Algoritmi

Dettagli

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento

Dettagli

Introduzione all'algoritmica per i Licei (C++). 2 Massimo e minimo.

Introduzione all'algoritmica per i Licei (C++). 2 Massimo e minimo. Introduzione all'algoritmica per i Licei (C++). 2 Massimo e minimo. versione 13 gennaio 2015 Elio Giovannetti Dipartimento di Informatica Università di Torino Quest'opera è distribuita con Licenza Creative

Dettagli

Progetto Corda. Alberto Ferrari. Alberto Ferrari Ingegneria dell'informazione, UniPR. 18/12/2017 Progetto Corda

Progetto Corda. Alberto Ferrari. Alberto Ferrari Ingegneria dell'informazione, UniPR. 18/12/2017 Progetto Corda Progetto Corda Alberto Ferrari Alberto Ferrari Ingegneria dell'informazione, UniPR file:///e:/cordanoweb/lez/array.html#3 1/33 Array (ordinamento) 2/33 file:///e:/cordanoweb/lez/array.html#3 2/33 Sort

Dettagli

Calcolatori Elettronici: indirizzi e oggetti

Calcolatori Elettronici: indirizzi e oggetti Calcolatori Elettronici: indirizzi e oggetti G. Lettieri 3 Marzo 2019 Gli indirizzi sono relativi ad un bus: tutti i componenti collegati al bus, in grado di rispondere a richieste di lettura o scrittura,

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Algoritmi di ordinamento Il problema Vogliamo ordinare un array monodimensionale in modo crescente per il caso decrescente valgono le stesse considerazioni Vari algoritmi possibili Diverse caratteristiche

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 4 Ordinamento Ordinamento Dato un insieme S di n oggetti presi da un dominio totalmente ordinato, ordinare S Esempi: ordinare alfabeticamente lista di nomi, o insieme

Dettagli

Analisi di algoritmi e di problemi

Analisi di algoritmi e di problemi Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2006-07 Lezioni prof. Elio Giovannetti Analisi di algoritmi e di problemi

Dettagli

Un esempio di calcolo di complessità: insertion sort

Un esempio di calcolo di complessità: insertion sort Un esempio di calcolo di complessità: insertion sort Vediamo su un esempio come si può calcolare la complessità di un algoritmo... L esempio è un metodo semplice per ordinare arrays: insertion sort, o

Dettagli

Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente

Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente Divide et impera - Schema generale Divide-et-impera (P, n) if n k then risolvi direttamente

Dettagli

Strutture Dati. Nicu Sebe. Informatica Nicu Sebe 1 / 27

Strutture Dati. Nicu Sebe. Informatica Nicu Sebe 1 / 27 Strutture Dati Nicu Sebe Informatica Nicu Sebe 1 / 27 Dati e Tipi di Dati e Spazi Una variabile è caratterizzata dal suo Tipo Specifica i valori che può assumere (Insieme di Definizione) Specifica a quanti

Dettagli

Ordinamenti per confronto: albero di decisione

Ordinamenti per confronto: albero di decisione Ordinamenti per confronto: albero di decisione Albero di decisione = rappresentazione grafica di tutte le possibili sequenze di confronti eseguite da un algoritmo assegnato di ordinamento per confronto

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Algoritmi e Strutture Dati Ordinamento Dato un insieme S di n oggetti presi da un dominio totalmente ordinato, ordinare S Algoritmi di ordinamento Esempi: ordinare una lista di nomi alfabeticamente, o

Dettagli

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

Sommario. Ordinamento. Selection Sort Bubble Sort/ Shaker Sort Shell Sort Ordinamento Sommario Ordinamento Selection Sort Bubble Sort/ Shaker Sort Shell Sort Cosa e' l'ordinamento Il problema consiste nell elaborare insiemi di dati costituiti da record I record hanno sono costituiti

Dettagli

Ordinamento per inserzione e per fusione

Ordinamento per inserzione e per fusione Ordinamento per inserzione e per fusione Alessio Orlandi 15 marzo 2010 Fusione: problema Problema Siano A e B due array di n A e n B interi rispettivamente. Si supponga che A e B siano ordinati in modo

Dettagli

Esercizio. 2 i=i*2) j=j*2)

Esercizio. 2 i=i*2) j=j*2) Esercizio 1 Esercizio 2 i=i*2) j=j*2) Soluzione Il frammento è composto da due parti quasi identiche. L unica differenza è il modo in cui crescono i contatori. Nella prima parte la crescita è lineare mentre

Dettagli

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

COGNOME E NOME (IN STAMPATELLO) MATRICOLA Politecnico di Milano Facoltà di Ingegneria dell Informazione Informatica 3 Proff. Campi, Ghezzi, Matera e Morzenti Seconda prova in itinere 4 Luglio 2006 COGNOME E NOME (IN STAMPATELLO) MATRICOLA Risolvere

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 4 Ordinamento: Quicksort (*) e metodi di ordinamento lineari Punto della situazione Problema dell ordinamento: Lower bound (n log n) Upper bound O(n log n) Algoritmi

Dettagli

Algoritmi su Array. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

Algoritmi su Array. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Ringraziamenti prof. Stefano Mizzaro, Università di Udine http://users.dimi.uniud.it/~stefano.mizzaro/

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Algoritmi di ordinamento! Selection Sort! Quick Sort! Lower bound alla complessità degli algoritmi di ordinamento Ordinamento 1 Selection Sort SelectionSort(dati[]) { for (i=0; idati.length-1; i++) { min

Dettagli

Argomenti. Array. Stringhe. Merge sort

Argomenti. Array. Stringhe. Merge sort ARRAY Ivan Lanese Argomenti Array Stringhe Merge sort Array E' una struttura dati che contiene più elementi dello stesso tipo Normalmente su elementi diversi di uno stesso array si fanno operazioni simili

Dettagli

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 17 A. Miola Gennaio 2012 1 Contenuti q Array paralleli q Array e oggetti q Ricerca sequenziale q Ricerca binaria q Fusione di sequenze

Dettagli

Informatica/ Ing. Meccanica e Ing. Edile/ Prof. Verdicchio/ 16/07/2013 / Foglio delle domande / VERSIONE 1

Informatica/ Ing. Meccanica e Ing. Edile/ Prof. Verdicchio/ 16/07/2013 / Foglio delle domande / VERSIONE 1 Informatica/ Ing. Meccanica e Ing. Edile/ Prof. Verdicchio/ 16/07/2013 / Foglio delle domande / VERSIONE 1 1) In un diagramma di flusso, la rappresentazione di un ciclo WHILE include sicuramente almeno:

Dettagli

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false; Metodi iterativi con array monodimensionali 1. Scrivere un metodo che, dato un array di interi a, restituisce il valore minimo in a. public static int minimo (int[] a) { int min = a[0]; for (int i=1; i

Dettagli

Ricerca in Array/Lista. Dato un array o lista di n elementi, vogliamo trovarne uno (e.g., un numero x in un array di interi)

Ricerca in Array/Lista. Dato un array o lista di n elementi, vogliamo trovarne uno (e.g., un numero x in un array di interi) Tabelle Hash Ricerca in Array/Lista Dato un array o lista di n elementi, vogliamo trovarne uno (e.g., un numero x in un array di interi) Ricerca in Array/Lista Dato un array o lista di n elementi, vogliamo

Dettagli

Insert sort. Considero il primo elemento a 1. cerco il minimo tra gli elementi 3...N. scambio il minimo trovato con il primo e- lemento

Insert sort. Considero il primo elemento a 1. cerco il minimo tra gli elementi 3...N. scambio il minimo trovato con il primo e- lemento Insert sort Considero il primo elemento a 1 cerco il minimo tra gli elementi 2...N scambio il minimo trovato con il primo e- lemento considero ora a 2 cerco il minimo tra gli elementi 3...N scambio il

Dettagli

Ordinamento. Lorenzo Donatiello,Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna

Ordinamento. Lorenzo Donatiello,Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna Ordinamento Lorenzo Donatiello,Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna Original work Copyright Alberto Montresor, University of Trento (http://www.dit.unitn.it/~montreso/asd/index.shtml)

Dettagli

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

Algoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati. E. Calabrese: Fondamenti di Informatica Algoritmi-1 Algoritmi di ricerca Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati. Per esempio: - cercare

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Algoritmi di ordinamento Selection Sort Quick Sort Lower bound alla complessità degli algoritmi di ordinamento giu 03 ASD 1 Selection Sort SelectionSort(dati[]) { for (i=0; i

Dettagli

Strutture Dati. Luca Abeni

Strutture Dati. Luca Abeni Strutture Dati Luca Abeni Dati e Tipi di Dati Una variabile è caratterizzata dal suo Tipo Specifica i valori che può assumere (Insieme di Definizione) Specifica a quanti byte di memoria la variabile è

Dettagli

Tecniche della Programmazione, lez.28

Tecniche della Programmazione, lez.28 Tecniche della Programmazione, lez.28 Problema dell'ordinamento di una sequenza di elementi lavorare sulla sequenza ordinata puo' essere utile in parecchi casi - ricerca di un elemento - unicita' di un

Dettagli

Algoritmi su Array. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

Algoritmi su Array. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna Algoritmi su Array Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Algoritmi su Array 2 Ringraziamenti prof. Stefano Mizzaro,

Dettagli

ALGORITMI DI ORDINAMENTO E RICERCA BINARIA. Docente: Giorgio Giacinto AA 2008/2009. problema dell ordinamento in modi diversi

ALGORITMI DI ORDINAMENTO E RICERCA BINARIA. Docente: Giorgio Giacinto AA 2008/2009. problema dell ordinamento in modi diversi Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2

Dettagli

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A Ingegneria e Scienze Informatiche - Cesena A.A. 2014-2015 pietro.dilena@unibo.it MergeSort MergeSort MergeSort: esempio MergeSort: pseudocodice Algoritmo di ordinamento ricorsivo basato sulla tecnica Divide

Dettagli

Informatica Generale Andrea Corradini Algoritmi: ordinamento per inserimento e ricorsione

Informatica Generale Andrea Corradini Algoritmi: ordinamento per inserimento e ricorsione Informatica Generale Andrea Corradini 14 - Algoritmi: ordinamento per inserimento e ricorsione Sommario Un algoritmo iterativo: l'ordinamento per inserimento (insertion sort) La ricorsione: i numeri triangolari

Dettagli

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4 Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4 Heap sort; ordinamento senza confronti @ G. Gini 2013 Ordinamento per confronti: complessita' Esistono altri algoritmi di ordinamento

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 3 novembre 2010 1 Trova la somma/1 Scrivere un algoritmo che dati in input un array A[1... n] di n interi

Dettagli

Olimpiadi di Informatica 2009 Giornate preparatorie

Olimpiadi di Informatica 2009 Giornate preparatorie Olimpiadi di Informatica 2009 Giornate preparatorie Dipartimento di Informatica Università di Torino Elio Giovannetti marzo 2009 Lino il giornalaio. 03/19/09 1 Caratterizzazione ricorsiva Siano val[0],

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a Terzo scritto 19 Febbraio 2010

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a Terzo scritto 19 Febbraio 2010 Cognome Matricola Nome Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2009 10 Terzo scritto 19 Febbraio 2010 Quesito Una Farmacia è rappresentata da un array di farmaci

Dettagli

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array Classi e array Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array Si vuole definire una classe Polinomio per la rappresentazione di polinomi a

Dettagli

Lezione 6 programmazione in Java

Lezione 6 programmazione in Java Lezione 6 programmazione in Java Nicola Drago drago@sci.univr.it Dipartimento di Informatica Università di Verona Anteprima Le costanti I vettori Cos è un vettore Come si usa I vari tipi di vettori Esempi

Dettagli

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea

Dettagli

Gli algoritmi ricorsivi di ordinamento. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

Gli algoritmi ricorsivi di ordinamento. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino ordinamento Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Merge Sort Ricorsivo, divide et impera Stabile Divisione: due sottovettori SX e DX rispetto al centro del vettore. p r A.A.

Dettagli

Lo sviluppo di un semplice programma e la dimostrazione della sua correttezza

Lo sviluppo di un semplice programma e la dimostrazione della sua correttezza Il principio di induzione Consideriamo inizialmente solo il principio di induzione per i numeri non-negativi, detti anche numeri naturali. Sia P una proprietà (espressa da una frase o una formula che contiene

Dettagli

Dati aggregati. Violetta Lonati

Dati aggregati. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica - in breve: Definizione di tipi Array Stringhe Strutture

Dettagli

Algoritmi di Ordinamento

Algoritmi di Ordinamento Algoritmi di Ordinamento 1 Algoritmi di ordinamento Selection Sort Quick Sort Lower bound alla complessità degli algoritmi di ordinamento Statistiche di ordine 2 Selection Sort SelectionSort(dati[]) {

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Algoritmi di ordinamento Gli ordinamenti interni sono fatti su sequenze in memoria centrale Fondamenti di Informatica 18. Algoritmi di ordinamento in C++ Gli ordinamenti esterni sono fatti su sequenze

Dettagli

ALGORITMI Docente: Prof. Domenico Cantone

ALGORITMI Docente: Prof. Domenico Cantone CORSO SPECILE DI DURT NNULE PER IL CONSEGUIMENTO DELL BILITZIONE LL INSEGNMENTO NELL SCUOL SECONDRI DI I e II GRDO Indirizzo Fisico - Informatico - Matematico a.a. 00/07 - Classe - Informatica LGORITMI

Dettagli

Fondamenti di Programmazione - Prof.ssa Gargano Anno Acc Esercitazioni 2009

Fondamenti di Programmazione - Prof.ssa Gargano Anno Acc Esercitazioni 2009 Fondamenti di Programmazione - Prof.ssa Gargano Anno Acc. 2008-09 Esercitazioni 2009 1. Mostrare per induzione che per ogni intero positivo n 0, la seguente affermazione S(n) é vera: S(n): n i=0 2i = 2

Dettagli

Fondamenti di Informatica L-A. Esercitazione 6

Fondamenti di Informatica L-A. Esercitazione 6 Fondamenti di Informatica L-A Esercitazione 6 Passaggio dei Parametri nelle Funzioni Ordinamento di Vettori Paolo Torroni Università degli Studi di Bologna Laurea in Ingegneria Elettronica e delle Telecomunicazioni

Dettagli

Corso di Tecniche di Programmazione

Corso di Tecniche di Programmazione Problema: Data una sequenza di elementi in ordine qualsiasi, ordinarla. Corso di Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica Anno Accedemico 003/004 Proff. Giuseppe

Dettagli

QUICKSORT. Basato sul paradigma divide-et-impera (come MERGE-SORT)

QUICKSORT. Basato sul paradigma divide-et-impera (come MERGE-SORT) QUICKSORT Basato sul paradigma divide-et-impera (come MERGE-SORT) Divide: stabilisce un valore di q tale da dividere l array A[p.. r] in due sottoarray non vuoti A[p.. q] e A[q+1.. r], dove ogni elemento

Dettagli

Esercitazione 1. Introduzione agli algoritmi di ordinamento

Esercitazione 1. Introduzione agli algoritmi di ordinamento Esercitazione 1 Introduzione agli algoritmi di ordinamento Algoritmi di ordinamento Algoritmi utilizzati per elencare gli elementi di un insieme secondo una sequenza stabilita da una relazione d'ordine,

Dettagli

Si usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato

Si usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato Le tavole hash È il modo con cui sono realizzati gli HashSet Si usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato Principio base Gli array hanno le caratteristiche

Dettagli

ORDINAMENTO PER SELEZIONE ORDINAMENTO PER SELEZIONE ORDINAMENTO VELOCE CONFRONTI

ORDINAMENTO PER SELEZIONE ORDINAMENTO PER SELEZIONE ORDINAMENTO VELOCE CONFRONTI ORDINAMENTO PER SELEZIONE Per l analisi delle prestazioni di tale algoritmo di ordinamento, si considerano i due cicli for annidati: poiché i confronti avvengono nel ciclo interno si ha che n 2 i= 0 (

Dettagli

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni

Dettagli

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Strutture di Dati Conclusioni parte b versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G.

Dettagli

Introduzione all'algoritmica. 1 Primo esempio: il massimo di una sequenza.

Introduzione all'algoritmica. 1 Primo esempio: il massimo di una sequenza. Introduzione all'algoritmica (tratta da una presentazione preparata da Elio Giovannetti) 1 Primo esempio: il massimo di una sequenza. Ferruccio Damiani Dipartimento di Informatica Università di Torino

Dettagli

Informatica per Statistica Riassunto della lezione del 21/10/2011

Informatica per Statistica Riassunto della lezione del 21/10/2011 Informatica per Statistica Riassunto della lezione del 1/10/011 Igor Melatti Costrutti del linguaggio C: ripasso Si consideri il programma C alla Figura 1 ci sono due dichiarazioni di funzioni, insertion

Dettagli

Informatica (A-K) 14. Linguaggio C -4

Informatica (A-K) 14. Linguaggio C -4 Strutture Dati in C Le strutture dati sono entità che permettono di memorizzare dati in modo organizzato e funzionale a particolari esigenze Informatica (A-K) 14. Linguaggio C -4 Strutture Dati tipiche

Dettagli

Algoritmi e Principi dell Informatica

Algoritmi e Principi dell Informatica Algoritmi e Principi dell Informatica Appello del 1 Settembre 2016 Chi deve sostenere l esame integrato (API) deve svolgere tutti gli esercizi in 2 ore e 30 minuti. Chi deve sostenere solo il modulo di

Dettagli

Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012

Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012 Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012 Igor Melatti Cenni sui puntatori in C Per ogni variabile normale dichiarata, il compilatore riserva una precisa quantità di

Dettagli

Corso: Fondamenti di Informatica (Gruppo 2) a.a Corsi di laurea: Ing. Settore Informazione

Corso: Fondamenti di Informatica (Gruppo 2) a.a Corsi di laurea: Ing. Settore Informazione Corso: Fondamenti di Informatica (Gruppo 2) a.a. 2017-18 Corsi di laurea: Ing. Settore Informazione Questionario a Risposte Multiple per auto-valutazione del Lab05 Domanda n. 1 Argomento: Iterazioni, array

Dettagli

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità Laboratorio di Algoritmi e Strutture Dati Code con Priorità Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso

Dettagli

Laboratorio di Architettura degli Elaboratori A.A. 2016/17 Programmazione Assembly

Laboratorio di Architettura degli Elaboratori A.A. 2016/17 Programmazione Assembly Laboratorio di Architettura degli Elaboratori A.A. 2016/17 Programmazione Assembly Scrivere il codice ARM che implementi le specifiche richieste e quindi verificarne il comportamento usando il simulatore

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Algoritmi di ordinamento Il problema Vogliamo ordinare un array monodimensionale in modo crescente per il caso decrescente valgono le stesse considerazioni Vari algoritmi possibili Diverse caratteristiche

Dettagli