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

Dimensione: px
Iniziare la visualizzazioe della pagina:

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

Transcript

1 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 spazio aggiuntivo) Usa la una struttura di dati heap. Definizione: Heap binario massimo (minimo) = albero binario in cui ogni nodo figlio ha una chiave minore (maggiore) o uguale alla chiave del proprio nodo padre.

2 Heap L albero è quasi completo : completo su tutti i livelli tranne eventualmente sul livello più basso che è riempito da sinistra a destra L'Altezza dell albero : lunghezza del più lungo cammino discendente dalla radice ad una foglia 16 i=

3 Heap Proprietà di ordinamento parziale dello heap: ogni nodo interno contiene un valore maggiore (minore) uguale del valore contenuto nei figli. Da ciò segue che: 1. L elemento più grande (piccolo) dello heap è memorizzato nella radice. 2. Ogni nodo interno contiene un valore maggiore (minore) uguale del valore contenuto in tutti i suoi discendenti.

4 Heap Heapsize: numero di elementi nello heap Diverso in genere dalla lunghezza del vettore che lo contiene i= Length[A] Heap-size[A] Heap-size[A] Length[A] Un albero binario quasi completo può essere descritto da un vettore in cui il figlio sinistro (left(i)) ed il figlio destro (right(i) di un nodo di posizione i si trovano nelle posizioni 2i e 2i+1 (se minori di heapsize) rispettivamente Il padre è in posizione floor(i/2), se tale valore è 1.

5 Altezza albero binario i= Altezza di un nodo: numero di archi sul più lungo cammino dal nodo ad una foglia H = Altezza dell'albero: massima altezza di un nodo H = altezza albero binario; N = numero di elementi nell'albero Se l albero è completo: N = H = 2 H *( 1 + (1/2) + + (1/2) H )= 2 H *(2-(1/2) H ) = 2 H+1 1 Se l albero non è completo: 2 H -1 < N < 2 H+1 1 H = (log(n)) n k = 0 x k = x n+ 1 1 x 1

6 Heapify Supponiamo che A sia uno heap. Alteriamo il valore di A[1]. L array che otteniamo non è più un heap. I sottoalberi con radice in A[right(1)] ed A[left(1)] sono ancora heap. Dobbiamo scrivere una procedura che permuti gli elementi A[1], A[2],, A[heapsize[A]] in modo da ricostruire uno heap. Heapify(A,i) l left(i) r right(i) If (l heapsize(a)) and (A[l] > A[i]) then largest l else largest i If (r heapsize(a) ) and (A[r] > A[largest]) then largest r If (largest i) then scambia(a[i], A[largest]) Heapify(A, largest)

7 Heapify in C // n è l'heapsize. Attenzione: gli indici partono da 0 void heapify(int *a, int n, int i) { int l = 2 * i + 1;//figlio sinistro in posizione 2i+1 int r = l + 1;//figlio destro in posizione 2i+2 int m; } m = (l < n && a[l] > a[i])? l : i; if(r < n && a[r] > a[m]) m = r; if(m!= i) { swap(a,i,m); heapify(a,n,m); }

8 Buildheap La procedura heapify può essere usata in modo bottom-up per convertire un vettore A[1 n], in uno heap di lunghezza n. Build-heap(A) heapsize(a) lenght(a) for i lenght[a]/2 down to 1 do heapify(a,i) Complessità - Numero di nodi ad altezza h al più parte intera sup. di n (si prova per ( h+ 1) induzione) 2 - Altezza di uno heap con n elementi: parte intera inf. di log 2 n log(n) T (n) h=0 h n 2 (h + 1) n h=0 h 2 (h + 1) n h=0 h 2 (h ) 2 n O(n) h=0 h x h = x 1 x 2

9 Heapsort Heapsort(A) buildheap(a) for i = length(a) down to 2 do scambia(a[1], A[i]) heapsize(a) = heapsize(a)-1 heapify(a, 1) Tempo di esecuzione : O(n log(n)) Ordinamento in loco

10 Coda con priorità Una coda con priorità è una struttura dati che rappresenta insieme finito S di oggetti sul quale è definita una funzione priorità p(s) (esempio l'ordine sulle chiavi) Coda con priorità massima (minima); L'elemento con maggiore (minore) priorità è sempre in testa alla coda Sulla coda sono definite le seguenti operazioni: 1.MAXIMUM(A): ritorna l elemento con massima priorità. 2.EXTRACT_MAX(A): estrae e ritorna l elemento con massima priorità - La coda va risistemata dopo l'estrazione 3.INSERT(A, p): inserisce un nuovo elemento p nella coda. 4. Increase_key(A,i,k): assegna al nodo di indice i la nuova priorità k

11 Coda con priorità Con l'implementazione dello Heap mediante vettore A possiamo realizzare una coda a priorità efficiente MAXIMUM(A) ha un tempo di esecuzione costante, O(1) MAXIMUM(A) return A[1] EXTRACT_MAX(A) ha un tempo di esecuzione O(log(n)), dovuto alla chiamata Heapify. EXTRACT_MAX(A) if heapsize(a) < 1 then error heap underflow max A[1] A[1] A[heapsize(A)] heapsize[a] heapsize(a) 1 Heapify(A,1) return max

12 Coda con priorità HEAP-INSERT(A, key) : Inserisce il nuovo elemento con chiave key nella coda (alla fine) e deve far sì che sia rispettata la proprietà della coda. Ha un tempo di esecuzione O(log(n)), nel caso peggiore si risale l albero dalla foglia alla radice. HEAP-INSERT(A, key) heapsize(a) heapsize(a) + 1 i heapsize(a)// inserisce nell'ultimo livello prima posizione da sinistra while i > 1 and A[parent(i)] < key // risale finché non trova una chiave >= key A[i] A[parent(i)] i parent(i) end while A[i] key

13 Coda con priorità Increase_key(A,p,k) : Accedendo direttamente al nodo di indice p, ne cambia il valore della chiave. - Dopo deve far sì che sia rispettata la proprietà della coda - Risale lo heap e scambia il nodo con suo padre, fintanto che il padre ha chiave inferiore. NOTA 1: per la coda con minima priorità, la funzione da implementare è decrease_key. NOTA 2: attenzione alla implementazione delle funzioni che danno parent(i), left(i) e right(i) - Se gli indici dell'array che contiene lo heap, e quindi la coda, partono da 1, allora parent(i) = i/2, left(i)= 2i, right(i)= 2i +1 - E se partono da 0?

14 Misurare il tempo di esecuzione Nel file di intestazione time.h sono contenuti i prototipi che operano sulla data, sull'ora e sull'orologio interno time_t time (time_t *tp) Restituisce il tempo corrente espresso come numero di secondi trascorsi dal primo gennaio Per avere il tempo di esecuzione in secondi usiamo il seguente codice: time_t t1, t2; double sec; t1 = time(null); t2 = time(null); sec= difftime(t2,t1); difftime restituisce la differnza in secondi tra t2 e t1

15 Esercizi Esercizio 1. Scrivere un programma C che riceva le richieste di sussidio e le memorizzi in una coda a priorità. Ogni richiesta è formata da nome (stringa) e da un indicatore economico (scalare) che rappresenta anche la priorità della richiesta. Minore l'indicatore, maggiore la priorità. Il programma deve fornire poi all'utente 4 possibili funzionalità: 1. Inserire una nuova richiesta 2. Visualizzare il numero di richieste esistenti 3. Estrarre la richiesta con minimo indicatore economico 4. Visualizzare la richiesta con minimo indicatore Il programma deve uscire solo quando l'utente digita 'esci' Esercizio 2. Implementare una versione della coda con priorità che utilizzi un vettore, anziché uno heap, per implementare le operazioni richieste. Confrontare i tempi di esecuzione delle due versioni di coda con operazioni di inserimento e operazioni di estrazione del massimo partendo da una coda vuota.

16 Esercizi Esercizio 3. Implementare in C l'algoritmo Heapsort, e fare in modo che la funzione Heapsort(int*a, int*b, int heapsize) prenda in input un secondo vettore di interi b che al termine dell'algoritmo dovrà contenere la permutazione degli indici di 'a' corripondente all'ordinamento. Esempio: Valori letti a: [22] [33] [77] [55] [1] [9] Valori ordinati [1] [9] [22] [33] [55] [77] Permutazione ordinamento b: [4] [5] [0] [1] [3] [2]

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

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

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

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

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

Visualizzazione di dati

Visualizzazione di dati Visualizzazione di dati MATLAB fornisce un estesa serie di strumenti per la visualizzazione di dati in due e tre dimensioni. Questi strumenti consentono di: Creare grafici Editare i grafici ed esplorare

Dettagli

Selection Sort (minsort)

Selection Sort (minsort) Selection Sort (minsort) function A = minsort2(a) costo n = length(a); n for i = 1:(n-1) emin = A(i); n-1 pos=i; n-1 for j = (i+1):n m if(a(j) < emin) m emin = A(j); s pos = j; s end end tmp = A(i); n-1

Dettagli

Handle di Funzioni Università degli Studi di Milano

Handle di Funzioni Università degli Studi di Milano Handle di Funzioni Versioni recenti di Matlab definiscono in modo pieno il tipo funzione, permetto di assegnare a variabili valori di tipo funzione definire funzioni che ricevono parametri di tipo funzione

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

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

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

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

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

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

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

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

ALGORITMI E STRUTTURE DATI

ALGORITMI E STRUTTURE DATI ALGORITMI E STRUTTURE DATI Esercitazioni AndreA Orlandini http://www.dia.uniroma3.it/~ orlandin/asd/ e-mail: orlandin@dia.uniroma3.it Orario di ricevimento: Martedì 14.00-16.00 HEAP SORT StudentiDIA Forum

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

In questa lezione. Code di priorità. [CLRS01] cap. 6 da pag. 114 a pag Prof. E. Fachini - Intr. Alg. lunedì 17 settembre 2012

In questa lezione. Code di priorità. [CLRS01] cap. 6 da pag. 114 a pag Prof. E. Fachini - Intr. Alg. lunedì 17 settembre 2012 In questa lezione Code di priorità [CLRS01] cap. 6 da pag. 114 a pag. 117 1 Coda di priorità: cos è? Una coda di priorità è una struttura dati dinamica che permette di gestire dei dati con chiave numerica,

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

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

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

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

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

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

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

Un heap binario è un albero binario con le seguenti caratteristiche:

Un heap binario è un albero binario con le seguenti caratteristiche: Heap Un heap binario è un albero binario con le seguenti caratteristiche: È quasi completo: tutti i livelli, tranna al più l ultimo sono completi e le foglie dell ultimo livello sono tutte adossate a sinistra.

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

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

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

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

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

Ordinamenti. Grafo : definizione. Un grafo G = (V,E)è composto da: V: insieme di vertici E V V: insieme di archi (edge) che connettono i vertici

Ordinamenti. Grafo : definizione. Un grafo G = (V,E)è composto da: V: insieme di vertici E V V: insieme di archi (edge) che connettono i vertici Ordinamenti 1 Vittorio Maniezzo Università di Bologna Grafo : definizione Un grafo G = (V,E)è composto da: V: insieme di vertici E V V: insieme di archi (edge) che connettono i vertici Un arco a= {u,v}

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

Ordinamenti. Vittorio Maniezzo Università di Bologna

Ordinamenti. Vittorio Maniezzo Università di Bologna Ordinamenti 1 Vittorio Maniezzo Università di Bologna Grafo : definizione Un grafo G = (V,E)è composto da: V: insieme di vertici E V V: insieme di archi (edge) che connettono i vertici Un arco a= {u,v}

Dettagli

Struttura dati Dizionario

Struttura dati Dizionario Struttura dati Dizionario Un dizionario è : un insieme di coppie (elemento, chiave) Sul campo chiave è definita una relazione d'ordine totale Su cui definiamo le seguenti operazioni: insert(elem e, chiave

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Prof. Aniello Murano Ordinamento, Ricorsione e Code di Priorità Corso di Laurea Codice insegnamento Email docente Anno accademico Informatica 13917 murano@na.infn.it

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

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

Code a priorità (Heap) Definizione Heapify (mantenimento coda a priorità) Costruire un Heap Insert, Maximum e Extract-Max

Code a priorità (Heap) Definizione Heapify (mantenimento coda a priorità) Costruire un Heap Insert, Maximum e Extract-Max Code a prortà (Heap) Defnzone Heapfy (mantenmento coda a prortà) Costrure un Heap Insert, Maxmum e Extract-Max Coda a prortà (Heap) Una coda a prortà può essere rappresentato da un albero bnaro completo.

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

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

QuickSort Università degli Studi di Milano

QuickSort Università degli Studi di Milano QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : - O(n 2 ) nel caso peggiore - O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior

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

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

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(n 2 ) nel caso peggiore - O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

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

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

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

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

Per semplicità eliminiamo le ripetizioni nell'albero.

Per semplicità eliminiamo le ripetizioni nell'albero. Albero binario di ricerca 20 40 100 95 Un albero binario di ricerca é un albero binario in cui ogni nodo ha un etichetta minore o uguale a quelle dei nodi nel sottoalbero radicato nel figlio destro e maggiore

Dettagli

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE PROGRAMMAZIONE II canale A-D 2007-2008 14 luglio 2008 TRACCIA DI SOLUZIONE 1. Si vogliono realizzare mediante puntatori delle liste circolari, cioè delle liste tali che l ultimo elemento della lista punta

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Alberi Un albero è una collezione non vuota di: nodi con nome e informazioni

Dettagli

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco. Alberi Alberi Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Frodo Dudo Daisy Alberi Gli alberi sono una generalizzazione

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

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica giovedì 9

Dettagli

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D:

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D: Ordered search table Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D: possiamo memorizzare le entrate di D in un array list S in ordine non decrescente di chiavi:

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

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

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 binari: definizione e alcune proprietà

Alberi binari: definizione e alcune proprietà Alberi binari: definizione e alcune proprietà Alberi binari Un albero binario è un albero con radice in cui ogni nodo ha al più due figli. In maniera più formale: Definizione. (Alberi binari) Un albero

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/20010 I. Castelli Alberi binari di ricerca, A.A. 2009/20010

Dettagli

Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei

Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei Alberi Alberi: definizioni Alberi Binari Esercizi su alberi binari: metodi ricorsivi Struttura dati per alberi generici 1 Alberi Gli alberi sono strutture dati naturalmente ricorsive Un albero è un particolare

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Alberi di ricerca Domenico Fabio Savo 1 Dizionari Gli alberi di ricerca sono usati per realizzare in modo efficiente il tipo di dato Dizionario 2 Alberi binari di ricerca (BST

Dettagli

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Sommario Implementazione con Vettori Implementazione con Strutture Collegate Concetti

Dettagli

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico

Dettagli

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco. Alberi Alberi Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Dudo Frodo Daisy Alberi Gli alberi sono una generalizzazione

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

Complementi di Algoritmi e Strutture Dati. Soluzioni prova scritta 7 giugno 2017

Complementi di Algoritmi e Strutture Dati. Soluzioni prova scritta 7 giugno 2017 Complementi di Algoritmi e Strutture Dati (III anno Laurea Triennale - a.a. 2016/17) Soluzioni prova scritta 7 giugno 2017 Esercizio Union find (punti 6) Considerare la foresta union-find sottostante e

Dettagli

Esercizio 1. E vero che in un AVL il minimo si trova in una foglia o nel penultimo livello? FB = -1. livello 0 FB = -1. livello 1 FB = -1.

Esercizio 1. E vero che in un AVL il minimo si trova in una foglia o nel penultimo livello? FB = -1. livello 0 FB = -1. livello 1 FB = -1. Esercizio 1 E vero che in un AVL il minimo si trova in una foglia o nel penultimo livello? FB = -1 livello 0 FB = -1 FB = -1 livello 1 FB = -1 livello 2 livello 3 L altezza è 3, il minimo si trova nel

Dettagli

Lezione 6: 12 Novembre 2013

Lezione 6: 12 Novembre 2013 Tutorato di Algoritmi e Strutture Dati [CT0371] Tutor: Alberto Carraro Lezione 6: 12 Novembre 2013 Disclaimer: Queste note non sono state sottoposte al consueto controllo riservato alle pubblicazioni ufficiali.

Dettagli

Il vettore e la lista concatenate (o catena) sono due esempi di strutture interne.

Il vettore e la lista concatenate (o catena) sono due esempi di strutture interne. Strutture dati PILA e CODA Le strutture dati si dividono in interne e astratte. Quelle astratte sono rappresentazioni dei dati di un problema che rispecchiano le proprietà dei dati e le relazioni usate

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

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno Il concetto di dato Il concetto

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Strutture Elementari Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 29 ottobre 2008 Strutture Dati Astratte Il concetto di dato Il concetto

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 Bilanciamento negli alberi di ricerca @ G. Gini 2013 Dizionari Dizionario Insieme dinamico che implementa le seguenti funzionalità Cerca

Dettagli

Esercitazione 6. Alberi binari di ricerca

Esercitazione 6. Alberi binari di ricerca Esercitazione 6 Alberi binari di ricerca Struttura base Rappresentabile attraverso una struttura dati concatenata in cui ogni nodo è un oggetto di tipo struttura Ogni nodo contiene: campo chiave (key)

Dettagli

Multi-way search trees

Multi-way search trees Multi-way search trees GT. 10.4 1 Argomenti Multi-way search trees Multi-way searching 9 (2,4) Trees 2 5 7 10 14 2 1 Alberi Binari di Ricerca Bilanciati n numero di chiavi (entry(key,elem)) AVL tree log(

Dettagli

Algoritmi e strutture dati 16 Dicembre 2004 Canali A L e M Z Cognome Nome Matricola

Algoritmi e strutture dati 16 Dicembre 2004 Canali A L e M Z Cognome Nome Matricola Algoritmi e strutture dati 16 Dicembre 04 Canali A L e M Z Cognome Nome Matricola Problema 1 (6 punti) Determinare la funzione calcolata dal metodo mistero e la sua complessità computazionale in funzione

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

Implementazione dell albero binario in linguaggio C++

Implementazione dell albero binario in linguaggio C++ Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Definizione Un albero si dice albero binario di ricerca è un albero binario in cui: - Ogni nodo è caratterizzato un valore chiamato chiave - L insieme delle chiavi è totalmente

Dettagli

Alberi binari (radicati e ordinati) della radice Il padre del nodo 5 e del nodo 3

Alberi binari (radicati e ordinati) della radice Il padre del nodo 5 e del nodo 3 Alberi binari (radicati e ordinati) Il figlio sinistro della radice Il padre del nodo 5 e del nodo 3 4 3 Il figlio sinistro del nodo 2 2 5 1 6 7 8 9 La radice Il figlio destro della radice una foglia Figlio

Dettagli

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio Algoritmi Greedy Tecniche Algoritmiche: tecnica greedy (o golosa) Idea: per trovare una soluzione globalmente ottima, scegli ripetutamente soluzioni ottime localmente Un esempio Input: lista di interi

Dettagli

Alberi Binari di Ricerca

Alberi Binari di Ricerca Alberi Binari di Ricerca Algoritmi su gli alberi binari: visite Dato un puntatore alla radice di un albero vogliamo scandire in modo sistematico tutti i nodi di tale albero In una lista abbiamo una unica

Dettagli

Introduzione. Heap-binomiali: un heap binomiale è un insieme di alberi binomiali.

Introduzione. Heap-binomiali: un heap binomiale è un insieme di alberi binomiali. Heap binomiali 1 Introduzione Heap-binomiali: un heap binomiale è un insieme di alberi binomiali. Alberi-binomiali: un albero binomiale è un albero ordinato definito ricorsivamente. 2 Proprietà degli alberi

Dettagli

ADT albero binario completo

ADT albero binario completo ADT albero binario completo Un albero binario completo è un albero binario in cui ogni livello, fino al penultimo, è completamente riempito. L'ultimo livello è riempito da sinistra a destra a 1 nodo b

Dettagli

Struttura di dati che può essere usata sia come dizionario, sia come coda con priorità

Struttura di dati che può essere usata sia come dizionario, sia come coda con priorità Albero binario di ricerca Struttura di dati che può essere usata sia come dizionario, sia come coda con priorità Proprietà: sia x un nodo di un (sotto)albero binario di ricerca Se y è un nodo del sottoalbero

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

Esercizi su alberi binari

Esercizi su alberi binari Esercizi su alberi binari Esercizi svolti: Determinazione nodi contenti verifica completezza verifica quasi completezza lunghezza del cammino interno determinazione ultima foglia in un quasi completo verifica

Dettagli

Alberi Binari di Ricerca

Alberi Binari di Ricerca Alberi Binari di Ricerca Prof. G. M. Farinella gfarinella@dmi.unict.it www.dmi.unict.it/farinella Riferimenti Bibliografici Cormen T.H., Leiserson C.E., Rivest R.L Introduction to Algorithms, Third Edition,

Dettagli