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

Dimensione: px
Iniziare la visualizzazioe della pagina:

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

Transcript

1 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 21 Heapsort versione 2/2/27 Quest' opera è pubblicata sotto una Licenza Creative Commons Attribution-NonCommercial-ShareAlike 2.5. Dallo per la coda con priorità a un nuovo algoritmo di ordinamento. Partiamo dal Selection sort (ordinamento per estrazione successiva del minimo), pessimo perché quadratico, e modifichiamolo come segue. Prima di iniziare il ciclo di estrazioni successive del minimo, trasformiamo l'array in uno, attraverso n inserimenti: ciascuno di essi ha complessità log i, con i che varia da 1 a n: log 1 + log log n < n log n Poi operiamo le estrazioni successive del minimo usando l'algoritmo di estrazione del minimo dello : abbiamo n estrazioni, con i che varia da n a 1, quindi di nuovo: log n log 2 + log 1 < n log n La complessità nel caso peggiore è quindi 2 n log n T worst (n) = Θ(n log n): è un algoritmo ottimale! 2/2/ E. Giovannetti - AlgELab Lez.2 I due cicli dell'algoritmo 1. Lo può essere costruito sullo stesso array da ordinare: ancora da esaminare Alla fine del ciclo l'intero array è diventato uno. 2. Ricorda: quando si estrae il minimo, lo si accorcia "dal fondo". Gli elementi successivamente estratti dallo possono perciò essere messi nello stesso array contenente lo, a partire dal fondo: ancora da svuotare parte già ordinata Estraendo ripetutamente il minimo e inserendolo nell'array a partire dal fondo si ottiene però l'ordine inverso. Come si può realizzare l'ordinamento solito? 2/2/ E. Giovannetti - AlgELab Lez.21 3 Ordinamento tramite (sort): soluzione. Basta usare uno a massimo invece di uno a minimo! In modo del tutto analogo a quanto illustrato nella slide precedente: 1. prima si trasforma, mediante inserimenti successivi, l'array in uno -a-massimo; 2. poi da esso si fanno successive estrazioni del massimo ognuna in tempo logaritmico, e i valori estratti vanno via via a riempire la parte di array liberata dallo, a partire dal fondo. Così l'ordine risultante è quello "giusto". 2/2/ E. Giovannetti - AlgELab Lez.21 4 Heapsort: caratteristiche. Complessità temporale del caso peggiore: Θ(n log n); non ha, come il quicksort, un caso peggiore quadratico, bensì è ottimale in ogni caso, come il mergesort. È un algoritmo che "lavora sul posto" (in place) cioè che, a differenza del mergesort, non ha bisogno di un array ausiliario della stessa dimensione dell'input. Inoltre, a differenza del quicksort, è un algoritmo iterativo, quindi il suo stack occupa solamente uno spazio massimo costante. Pertanto: Complessità spaziale (in ogni caso): Θ(1) Lo sort è dunque, dal punto di vista asintotico, l'algoritmo di ordinamento migliore fra quelli esaminati. Tuttavia nella maggior parte delle situazioni l'algoritmo di ordinamento più veloce, in media, risulta essere il quicksort! 2/2/ E. Giovannetti - AlgELab Lez.21 5 Heap in un array a partire dall'indice. Nota: Volendo usare lo per realizzare un algoritmo di ordinamento, lo stesso deve partire dall'indice invece che dall'indice 1. Il calcolo degl'indici del genitore e dei figli di un nodo deve essere cambiato di conseguenza: left(i) = 2i+1 right(i) = 2i+2 parent(i) = (i-1)/ /2/ E. Giovannetti - AlgELab Lez

2 Heap a massimo di elementi interi. realizzato in modo tradizionale non a oggetti. Inserimento. static void addtoheap(int newelem, int[], int lastindex) { aggiunge un nuovo elemento allo -in-array, parzialmente riempito con numero di elementi indiciati da a lastindex; Nota In tutte le procedure seguenti potrebbe essere conveniente usare come parametro la dimensione invece dell'indice dell'ultimo elemento; si è preferita la prima soluzione per ragioni didattiche di comprensibilità del programma. poiché useremo lo solo per realizzare l'ordinamento, l'indice dell'ultimo elemento (o, equivalentemente, la dimensione) non viene mantenuto in un campo o in una variabile: sarà il programma utilizzatore stesso che dovrà "conoscerlo" ad ogni istante; ad esempio, dopo aver fatto k inserimenti a partire dallo vuoto, si sa che la dimensione dello è k, e quindi l'indice dell'ultimo elemento è k-1; ecc. 2/2/ E. Giovannetti - AlgELab Lez /2/ E. Giovannetti - AlgELab Lez.21 8 Inserimento (addtoheap) int i = lastindex+1; la posizione iniziale del posto vuoto è alla prima cella libera (si crea virtualmente una nuova foglia al fondo dell'albero) int j; sarà l'indice del genitore del posto vuoto; while(i > && [j = (i-1)/2] < newelem) { il posto vuoto non è la radice e il suo genitore è minore dell'elemento da inserire; allora: [i] = [j]; faccio scendere il genitore nel posto vuoto i = j; faccio salire il posto vuoto (cioè sposto il suo indice uguagliandolo a quello del genitore) all'uscita dal while il posto vuoto o è la radice oppure il suo genitore è maggiore o uguale del valore da inserire; è quindi il posto giusto per effettuare l'inserimento: [i] = newelement; 2/2/ E. Giovannetti - AlgELab Lez.21 9 Estrazione del massimo static int extractmax(int[], int lastindex) { int max = []; estrae il massimo [] = [lastindex]; mette nella radice il valore dell'ultima foglia lastindex--; taglia la foglia movedown(,, lastindex); fa scendere al posto giusto la radice (il nodo di indice ) return max; 2/2/ E. Giovannetti - AlgELab Lez.21 1 Procedura movedown o fixheap Nell'algoritmo di ordinamento evidentemente non si vuole creare un oggetto separato di una classe PriorityQueue, ma realizzare lo direttamente nell'array da ordinare. Occorre quindi modificare il metodo movedown, facendolo diventare statico. L'array degli elementi e l'indice dell'ultimo elemento, che erano campi della classe PriorityQueue, diventano quindi parametri espliciti del metodo. Il parametro i è, come nella versione originale, l'indice della radice del sotto- da aggiustare (cioè del nodo da far scendere). static void movedown(int[], int i, int lastindex) Procedura fixheap o movedown i, inizialmente indice del nodo da far scendere, è poi l'indice del "posto vuoto" che viene via via fatto scendere; int node = [i];valore nodo iniziale da far scendere; int ichild; indice del maggiore dei figli del nodo di indice i i 8 ichild 6 5 2/2/ E. Giovannetti - AlgELab Lez /2/ E. Giovannetti - AlgELab Lez

3 Procedura fixheap o movedown while((ichild = 2*i+1) <= lastindex) { il posto vuoto ha almeno un figlio (il sinistro) j = ichild + 1; if(j <= lastindex && [j] > [ichild]) se ha anche il figlio destro, ed esso è maggiore del sinistro: ichild++; allora il più grande dei figli è il destro; in ogni caso ichild è l'indice del maggiore dei figli if(node < [ichild]) { se il valore da far scendere è minore almeno del maggiore dei figli [i] = [ichild]; i = ichild; faccio salire tale figlio scambiandolo con il posto vuoto else break; se il valore è maggiore di entrambi i figli, posto ok il posto vuoto o non ha figli, o ha figli tutti minori del valore [i] = node; 2/2/ E. Giovannetti - AlgELab Lez Procedura di ordinamento (sort) Esercizio 1. Si scriva per esercizio la procedura di ordinamento public static void sort(int[] a) richiamando le procedure addtoheap e extractmax in due rispettivi cicli for. Primo ciclo for: Secondo ciclo for: ancora da svuotare ancora da esaminare parte già ordinata 2/2/ E. Giovannetti - AlgELab Lez Raffinamento. L'array può essere trasformato in uno, invece che per mezzo di n inserimenti successivi (tempo totale Θ(n log n)), applicando ripetutamente movedown ai nodi a partire dal basso (vedremo che ciò richiede solo un tempo Θ(n)). Infatti: un albero costituito da una foglia è uno ; un albero quasi completo i cui sottoalberi sinistro e destro sono degli (e in cui quindi solo la radice può essere "fuori posto") diventa uno se si applica movedown alla sua radice: void trasformainheap(subarray) { if(subarray non è vuoto e non è una foglia) { trasformainheap(left(subarray)); trasformainheap(right(subarray)); movedown nel subarray la radice del subarray Raffinamento (continua) Con l'utilizzo dell'algoritmo lineare (vedi dimostrazione più avanti) di trasformazione diretta dell'array in, la complessità asintotica non cambia, perché il ciclo di estrazioni successive del massimo rimane n log n, e si ha quindi: T(n) = n + n log n = Θ(n log n) Tale tempo è tuttavia migliore di quello della versione iniziale, espresso da 2 n log n. 2/2/ E. Giovannetti - AlgELab Lez /2/ E. Giovannetti - AlgELab Lez Realizzazione della procedura trasformainheap (in inglese ify, cioè "ifica") static void ify(int[] a, int i) { int lastindex = a.length - 1; int j; if((j = 2*i+1) <= lastindex) { se la radice del sottoalbero ha almeno il figlio sinistro ify(a,j); ifica il figlio sinistro ify(a,j+1); ifica il figlio destro movedown(a,i,lastindex); fa scendere la radice Nota: se il figlio destro è inesistente, esso non ha a sua volta figli, quindi la procedura invocata su di esso ritorna senza errori e senza fare nulla (come nel caso di una foglia). 2/2/ E. Giovannetti - AlgELab Lez Le foglie sono già banalmente degli. indice /2/ E. Giovannetti - AlgELab Lez

4 Allora basta ificare dapprima tutti i sottoalberi di loro volta ificare; di radice di indice ). Allora basta ificare dapprima tutti i sottoalberi di loro volta ificare; di radice di indice ) /2/ E. Giovannetti - AlgELab Lez /2/ E. Giovannetti - AlgELab Lez.2 Allora basta ificare dapprima tutti i sottoalberi di loro volta ificare; di radice di indice ) /2/ E. Giovannetti - AlgELab Lez.21 Basta cioè ificare su tutti i nodi percorrendo l'albero per livelli dal basso verso l'alto, a partire dal primo nodo non-foglia, cioè dal genitore dell'ultima foglia: static void ify(int[] a) { int lastindex = a.length - 1; for(int j = (lastindex-1)/2; j >= ; j--) movedown(a,j,lastindex); Nota: (lastindex-1)/2 è l'indice del genitore dell'ultima foglia, cioè l'indice dell'ultimo nodo interno. Iniziando da esso e andando all'indietro, si esegue movedown su tutti i nodi interni. Si vede facilmente che la procedura iterativa e quella ricorsiva eseguono esattamente le stesse chiamate di movedown; esse hanno quindi la stessa complessità temporale, ma naturalmente la procedura iterativa è più efficiente e ha bisogno solo di uno spazio costante. 2/2/ E. Giovannetti - AlgELab Lez.22 Calcolo della complessità di ify Il tempo di esecuzione ify è la somma dei tempi di tutte le esecuzioni di movedown, quindi è la somma di tutte le altezze dei sottoalberi non-foglie (nel caso peggiore). Assumiamo per semplicità che l'albero sia completo: Quanti sono gli alberi di altezza 1 (radici arancioni)? Sono n foglie /2. 2/2/ E. Giovannetti - AlgELab Lez.23 Calcolo della complessità di ify Quanti sono gli alberi di altezza 2 (radici viola)? Sono n foglie /2 2. La somma delle altezze è quindi 2 n foglie /2 2. Quanti sono gli alberi di altezza 3? Sono n foglie /2 3. La somma delle loro altezze è 3 n foglie /2 3. Quanti sono gli alberi di altezza h? Sono n foglie /2 h. La somma delle loro altezze è h n foglie /2 h. La somma delle altezze dei sottoalberi non-foglie è quindi: n foglie /2 + 2 n foglie / n foglie / h n foglie /2 h k n foglie /2 k = n foglie (1/2 + 2/ / k/2 k ) con n foglie = 2 k Ma è 1/2 + 2/ / k/2 k < 2 (vedi slide seguente) Quindi T worst (n) < 2n foglie =Θ(n) (vedi slide seguente) Abbiamo dimostrato che ify ha complessità lineare. 2/2/ E. Giovannetti - AlgELab Lez.24 4

5 Calcolo della complessità di ify Dimostrazione di 1/2 + 2/ / k/2 k < 2 : Osservazione preliminare: 1/2 + 1/ / = (,111...) binario < 1 Allora: 1/2 + 2/ / k/2 k = 1/2 + 1/ / /2 k < 1 + 1/2+ 1/ / /2 k < 1-1/2 = 1/2 + 1/2 + 1/ / /2 k < 1 1/2 1/2 2 = 1/ /2 + 1/ / /2 k <... ma 1 + 1/2 + 1/ / /2 k < = 2 Dimostrazione di 2n foglie = O(n): Ricorda che il numero dei nodi di un albero completo è n = k = 2 k+1 1 = 2n foglie 1 Quindi 2n foglie = n 1 = Θ(n). 2/2/ E. Giovannetti - AlgELab Lez.25 Altro calcolo della complessità di ify (solo da leggere). Ricaviamo le equazioni di ricorrenza: T(1) = 1 T(n) = 2T(n/2) + T fixheap = 2T(n/2) + log n per n > 1 2 Usiamo, come al solito, il metodo delle successive espansioni, assumendo n = 2 k : T(m) = 2T(m/2) + log 2 m T(n) = = 2T(n/2) + log n 2 = 2(2T(n/2 2 ) + log (n/2)) + log 2 2 n = 2 2 T(n/2 2 ) + 2 log 2 (n/2) + log 2 n = 2 2 (2T(n/2 3 ) + log (n/2 2 2 )) + 2 log (n/2) + log 2 2 n = 2 3 T(n/2 3 ) log (n/2 2 2 ) + 2 log (n/2) + log 2 2 n =... = 2 k T(1) log (n/2 3 2 ) log (n/2 2 2 ) + 2 log (n/2) + log 2 2 n = n log (n/2 3 2 ) log (n/2 2 2 ) + 2 log (n/2) + log 2 2 n 2/2/ E. Giovannetti - AlgELab Lez.26 Altro calcolo della complessità di ify (continua) n + 2 k-1 log 2 (n/2k- 1 ) log 2 (n/2 2 ) + 2 log 2 (n/2) + log 2 n = n + 2 k-1 log 2 (2) + 2k-2 log 2 (2 2 ) + 2 k-3 log 2 (2 3 ) log 2 (2 k ) = n + 2 k k k k = n + n(1/2 + 2/ / k/2 k ) < n + n 2 = 3n = Θ(n) perché 1/2 + 2/ / k/2 k < 2 (vedi slide precedente)... ma 1 + 1/2 + 1/ / /2 k 2 (osserva: 1/2 + 1/ / = (, ) binario 1 ) binario Riassunto sort. È per selezione successiva del massimo, analogo al pessimo selection sort, ma usa uno -a-massimo (brevemente max-) perché da esso si estrae il massimo in modo più efficiente (logaritmico). Trasforma l'array in uno "partendo dal basso" tramite la procedura ify che usa ripetutamente movedown. Estrae ripetutamente il massimo dallo, usando ogni volta la procedura movedown per riaggiustare lo. Attenzione ai nomi: non confondere fixheap, che è un altro nome di movedown, con ify! Per aumentare la confusione, alcuni testi scambiano i nomi! 2/2/ E. Giovannetti - AlgELab Lez.27 2/2/ E. Giovannetti - AlgELab Lez.28 Esercizio 2 Definire la versione migliorata di Sort utilizzando la procedura ify illustrata nelle slides precedenti. Definire una classe contenente un main di prova che permetta di provare lo sort e di confrontarne i tempi con quelli del quicksort. 2/2/ E. Giovannetti - AlgELab Lez.29 5

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

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

Algoritmi e Laboratorio a.a Lezioni

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. 2009-10 Lezioni prof. Elio Giovannetti Lezione 22 Code con priorità

Dettagli

Il tipo astratto Coda con Priorità. Algoritmi e Laboratorio a.a Lezioni. Il tipo astratto Coda con Priorità

Il tipo astratto Coda con Priorità. Algoritmi e Laboratorio a.a Lezioni. Il tipo astratto Coda con Priorità Il tipo astratto Coda con Priorità Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2006-0 Lezioni prof. Elio Giovannetti

Dettagli

Esercitazione 3. Heapsort

Esercitazione 3. Heapsort Esercitazione Heapsort Heapsort Algoritmo di ordinamento che utilizza una struttura dati detta heap per la gestione delle informazioni Tempo di esecuzione O(n lg n) Heap (binario) = struttura dati composta

Dettagli

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ Heap e Heapsort Algoritmi di ordinamento Insertion Sort Quicksort Heapsort Insertion Sort L

Dettagli

Dato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche:

Dato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche: Heapsort Dato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche: T(n) = O(n log(n)) Alg. Ordinamento ottimale Ordina in loco (niente

Dettagli

Problemi di ordinamento

Problemi di ordinamento Problemi di ordinamento Input: una sequenza di n numeri a 1, a 2,..., a n ; Output: una permutazione a 1, a 2,..., a n di a 1, a 2,..., a n tale che a 1 a 2... a n. Generalmente, la sequenza è rappresentata

Dettagli

In questa lezione. Heapsort. ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 114

In questa lezione. Heapsort. ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 114 In questa lezione Heapsort ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 11 1 Paternità L heapsort è stato pubblicato da J. W. J. Williams nel 106. Pochi mesi

Dettagli

Algoritmi e Strutture di Dati

Algoritmi e Strutture di Dati Algoritmi e Strutture di Dati Code di priorità (Heap e heap_sort) m.patrignani Nota di copyright queste slides sono protette dalle leggi sul copyright il titolo ed il copyright relativi alle slides (inclusi,

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Esercitazione 7 Domenico Fabio Savo 1 Esercitazione: heap Abbiamo visto come utilizzare i MAX-HEAP nell'algoritmo di ordinamento heapsort che permette di ordinare un array di

Dettagli

Algoritmi e Strutture di Dati

Algoritmi e Strutture di Dati Algoritmi e Strutture di Dati Capitolo 0 - Code con priorità e insiemi disgiunti This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license,

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

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

In questa lezione. Costruire un max-heap. [CLRS01] cap. 6 par Prof. E. Fachini - Intr. Alg.

In questa lezione. Costruire un max-heap. [CLRS01] cap. 6 par Prof. E. Fachini - Intr. Alg. In questa lezione Costruire un max-heap [CLRS01] cap. 6 par. 6.3!1 Heapsort: analisi Heapsort(A) Build-Max-Heap(A) for i = A.length downto 2 do scambia A[1] e A[i] A.heap-size = A.heap-size - 1 Max-Heapify

Dettagli

Albero binario: Ogni nodo ha zero, uno, o due successori (ordinati)

Albero binario: Ogni nodo ha zero, uno, o due successori (ordinati) Heap 1 Vittorio Maniezzo - Università di Bologna Alberi binari Albero binario: Ogni nodo ha zero, uno, o due successori (ordinati) Albero binario completo: Tutte le foglie hanno la stessa profondità e

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

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

Il problema dell'ordinamento. Algoritmi e Laboratorio a.a Lezioni. Proprietà degli algoritmi di ordinamento: stabilità. 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. 2006-07 Lezioni prof. Elio Giovannetti

Dettagli

d. Cancellazione del valore 5 e. Inserimento del valore 1

d. Cancellazione del valore 5 e. Inserimento del valore 1 Esercizio1 Si consideri un albero binario non vuoto in cui a ciascun nodo v è associato un numero reale v.val. Scrivere un algoritmo che, dato in input l'albero T e un numero reale x, restituisce true

Dettagli

Alberi due-tre e alberi B

Alberi due-tre e alberi B Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Basi di Dati e Algoritmi, a.a. 2006-07 prof. Elio Giovannetti CREDITS Alcune slides con disegni

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 Insertion Sort Quicksort Heapsort Indice

Dettagli

Heap e code di priorità

Heap e code di priorità Heap e code di priorità Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010

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 (9 CFU) (A.A ) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1

Algoritmi (9 CFU) (A.A ) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1 Algoritmi (9 CFU) (A.A. 2009-10) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1 Overview Definiamo la struttura dati heap Operazioni di costruzione e gestione di un heap Algoritmo Heapsort Code

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

In questa lezione. Heap binario heapsort. [CLRS10] cap. 6, par Prof. E. Fachini - Intr. Alg.

In questa lezione. Heap binario heapsort. [CLRS10] cap. 6, par Prof. E. Fachini - Intr. Alg. In questa lezione Heap binario heapsort [CLRS10] cap. 6, par. 6.1-6.4!1 Heap binari Un heap binario è una struttura dati consistente di un array visto come un albero binario. A= 5 60 65 30 50 18 40 25

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

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni. Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni. Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro

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

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Heap Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Heap Heap binari: definizione Un heap binario è una struttura dati composta

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Heap Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 6 novembre 2008 Heap binari: definizione Un heap binario è una albero binario quasi completo

Dettagli

Introduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi. Parte prima

Introduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi. Parte prima Introduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi Parte prima 1) Si dimostri il teorema sulla limitazione inferiore per il tempo asintotico di esecuzione nel caso

Dettagli

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z Anno Accademico 2002-2003 9 luglio 2002-03 Domanda 1, punti 6 Si consideri la seguente classe Java, in cui,

Dettagli

ADT Coda con priorità

ADT Coda con priorità Code con priorità ADT Coda con priorità Una coda con priorità è una struttura dati dinamica che permette di gestire una collezione di dati con chiave numerica. Una coda con priorità offre le operazioni

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

Fondamenti teorici e programmazione

Fondamenti teorici e programmazione Fondamenti teorici e programmazione FTP(A) - modb Lezione 9 di ricerca binaria F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 1 liberi Un albero libero è un

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

lezione 9 min-heap binario Heap e Alberi posizionali generali

lezione 9 min-heap binario Heap e Alberi posizionali generali lezione 9 Heap e Alberi posizionali generali min-heap binario Un min-heap è un albero binario quasi completo in cui ogni nodo i diverso dalla radice soddisfa la seguente proprietà: il valore memorizzato

Dettagli

Heap Ordinamento e code di priorità. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 9

Heap Ordinamento e code di priorità. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 9 Heap Ordinamento e code di priorità Heap: definizione Definizione. Uno Heap (binario) è un albero binario finito i cui vertici sono etichettati da elementi di un insieme linearmente ordinato (chiavi),

Dettagli

Heap, heapsort e code a priorità. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

Heap, heapsort e code a priorità. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Heap, heapsort e code a priorità Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Heap Definizione: albero binario con proprietà strutturale: quasi completo (tutti i livelli completi,

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

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

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

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

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 8 Corso di Tecniche di programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti

Dettagli

Una definizione induttiva di albero binario astratto. Algoritmi e Laboratorio a.a Lezioni. Notazione lineare infissa per alberi binari.

Una definizione induttiva di albero binario astratto. Algoritmi e Laboratorio a.a Lezioni. Notazione lineare infissa per alberi binari. Una definizione induttiva di albero binario astratto 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

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

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

Gli heap. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Gli heap. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino 1 a.a. 2001/2002 Sommario Gli heap L algoritmo Heapsort Le code con priorità. 2 a.a. 2001/2002 Politecnico

Dettagli

Gli heap. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Gli heap. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino 1 a.a. 2001/2002 Sommario Gli heap L algoritmo Heapsort Le code con priorità. 2 a.a. 2001/2002 Matteo SONZA

Dettagli

Code con priorità. Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna.

Code con priorità. Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna. Code con priorità Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna marzolla@cs.unibo.it http://www.moreno.marzolla.name/ Copyright 2009 2012 Moreno Marzolla, Università di Bologna

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

Alberi ed Alberi Binari

Alberi ed Alberi Binari Alberi ed Alberi Binari Il tipo di dato Albero Un albero è una struttura di data organizzata gerarchicamente. È costituito da un insieme di nodi collegati tra di loro: ogni nodo contiene dell informazione,

Dettagli

Nozioni di base (II Parte)

Nozioni di base (II Parte) Nozioni di base (II Parte) 1 Ricorsione [GTG14, Par. 5.1-5.4 and 13.1] Algoritmo Ricorsivo: algoritmo che invoca se stesso (su istanze sempre più piccole) sfruttando la nozione di induzione. La soluzione

Dettagli

Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una

Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una relazione d ordine. Sono definite almeno le seguenti operazioni:

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

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Appello del 24 Gennaio 2007 Esercizio 1 (ASD) 1. Sia T (n) = T (n/6) + T (n/3) + Θ(n). Considerare ciascuna delle seguenti affermazioni

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

Esercizi su ABR. Prof. E. Fachini - Intr. Alg.!1

Esercizi su ABR. Prof. E. Fachini - Intr. Alg.!1 Esercizi su ABR Confronto proprietà ABR e Max-Heap. Proprietà del cammino radice-foglia individuato da una ricerca. Fusione di due ABR. Il successivo calcolato dalla radice Costruzione di un ABR bilanciato

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

Informatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann

Informatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann Informatica 3 LEZIONE 16: Heap - Codifica di Huffmann Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann Informatica 3 Lezione 16 - Modulo 1 Heap e code di priorità Introduzione

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

T 1 =1. n 4 n log n. T n =3 T. Esercizio 1 (6 punti) A.A Esame di Algoritmi e strutture dati 18 luglio 2008

T 1 =1. n 4 n log n. T n =3 T. Esercizio 1 (6 punti) A.A Esame di Algoritmi e strutture dati 18 luglio 2008 A.A. 00 0 Esame di Algoritmi e strutture dati luglio 00 Esercizio (6 punti) Risolvere con almeno due metodi diversi la seguente relazione di ricorrenza T = T n = T n n log n A.A. 00 0 Esame di Algoritmi

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

Moltiplicazione veloce di interi

Moltiplicazione veloce di interi Moltiplicazione veloce di interi Ogni numero intero w di n cifre può essere scritto come 10 n/2 w s + w d w s indica il numero formato dalle n/2 cifre più significative di w w d denota il numero formato

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

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

Heap, heap indiretti e code di priorità

Heap, heap indiretti e code di priorità Heap, heap indiretti e code di priorità Paolo Boldi 15 marzo 02 1 Introduzione Uno heap (letteralmente: mucchio) è (almeno idealmente) un albero binario i cui nodi contengono dei dati, ciascuno caratterizzato

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 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

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,

Dettagli

Scritto di Algoritmi e s.d. (1o anno) 16 Gennaio 2004 TESTO E RISPOSTE

Scritto di Algoritmi e s.d. (1o anno) 16 Gennaio 2004 TESTO E RISPOSTE Scritto di Algoritmi e s.d. (1o anno) 16 Gennaio 2004 TESTO E RISPOSTE Esercizio 1 (punti 1 + 4 in prima approssimazione) Consideriamo il seguente codice C: typedef struct nodo * Alb; struct nodo { int

Dettagli

Algoritmi e Strutture Dati. HeapSort

Algoritmi e Strutture Dati. HeapSort Algoritmi e Strutture Dati HeapSort Selection Sort: intuizioni L algoritmo Selection-Sort scandisce tutti gli elementi dell array a partire dall ultimo elemento fino all inizio e ad ogni iterazione: Viene

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

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

Alberi ed Alberi Binari di Ricerca

Alberi ed Alberi Binari di Ricerca Alberi ed Alberi Binari di Ricerca Il tipo di dato Albero Un albero è una struttura di data organizzata gerarchicamente. È costituito da un insieme di nodi collegati tra di loro: ogni nodo contiene dell

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

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

Spesso sono definite anche le seguenti operazioni:

Spesso sono definite anche le seguenti operazioni: Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una relazione d ordine. Sono definite almeno le seguenti operazioni:

Dettagli

Esercitazione 2. Quicksort

Esercitazione 2. Quicksort Esercitazione 2 Quicksort Caratteristiche Algoritmo di ordinamento mediamente molto efficiente Vantaggio: ordinamento sul posto Basato sul paradigma divide et impera (come merge sort) Elemento chiave:

Dettagli

Algoritmi e Strutture Dati 1

Algoritmi e Strutture Dati 1 Esonero del 31/03/2009 Compito n 1 Dimostrare che non tutte le funzioni f: ℵ 0,1 sono calcolabili. Dire se, giustificando la risposta applicando la definizione delle notazioni asintotiche, a) n log n =

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

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmo di ordinamento sul posto che ha tempo di esecuzione : QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : O(n2 ) nel caso peggiore O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior algoritmo

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

Dispense per i corsi di Informatica generale Corso di laurea in Matematica e. Introduzione agli Algoritmi Corso di laurea in Informatica

Dispense per i corsi di Informatica generale Corso di laurea in Matematica e. Introduzione agli Algoritmi Corso di laurea in Informatica Dispense per i corsi di Informatica generale Corso di laurea in Matematica e Introduzione agli Algoritmi Corso di laurea in Informatica Prof. Tiziana Calamoneri Prof. Giancarlo Bongiovanni Questi appunti

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e strutture dati Roberto Cordone A. A. 2015-16 Capitolo 3 Implementazioni dei dizionari ordinati Nota: queste dispense sono un rapido riassunto delle lezioni svolte nel dicembre 2015 e gennaio

Dettagli

Algoritmi e Strutture Dati. Lezione 4

Algoritmi e Strutture Dati. Lezione 4 Algoritmi e Strutture Dati Lezione www.iet.unipi.it/a.virdis Antonio Virdis a.virdis@iet.unipi.it Sommario Heap Ordinamento tramite Heap Soluzioni Esercizi heap 3 5 6 7 8 0 9 3 5 3 heap 3 5 6 7 8 0 9 heap

Dettagli

Esercitazione 4 Heap

Esercitazione 4 Heap Esercitazione 4 Heap Corso di Fondamenti di Informatica II Algoritmi e strutture dati A.A. 2015/2016 27 Aprile 2016 Sommario Scopo della esercitazione è quello di realizzare una struttura dati per gestire

Dettagli

heap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata

heap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata heap heap concetti ed applicazioni heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. tutte le foglie sono a sinistra ma non è un BST!! 3. ogni nodo contiene una chiave maggiore

Dettagli

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 27 marzo 2012 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,

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

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

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

Heap e Code di Priorità

Heap e Code di Priorità Heap e Code di Priorità heap heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. ogni nodo contiene una chiave maggiore o eguale di quelle presenti negli eventuali figli non

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

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve GLI ALBERI BINARI DI RICERCA Cosimo Laneve argomenti 1. alberi binari di ricerca 2. la ricerca di elementi e la complessità computazionale 3. operazione di cancellazione di elementi 4. esempi/esercizi

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

heap concetti ed applicazioni

heap concetti ed applicazioni heap concetti ed applicazioni ADT coda di priorità operazioni getfirst restituisce l'elemento nella struttura con massima priorità deletefirst cancella l'elemento nella struttura con massima priorità insert

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione

Dettagli