Heapsort.

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Code a priorità (Heap) Definizione
Alberi binari di ricerca
Code con priorità Ordinamento
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Esercizi su alberi binari
Algoritmi e strutture Dati - Lezione 7
Il problema del dizionario
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 8 Code con.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 8 Code con.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Interrogazioni su un albero binario di ricerca Search(S,k) – dato un insieme S ed un valore chiave k restituisce un puntatore x ad un elemento in S tale.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati (Mod. A)
Algoritmi e Strutture Dati IV. Heap e Code di Priorità
Esercizi su alberi binari
Heap binari e HeapSort.
Heap Ordinamento e code di priorità Ugo de Liguoro.
Soluzione: Algoritmo Heap-Sort Un array A[1..n] può essere interpretato come un albero binario: A[1] è la radice, A[2i] e A[2i+1] sono i figli di A[i]
1/32 Algoritmi e Strutture Dati HEAP Anno accademico
Introduzione agli algoritmi e strutture dati 2/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2005 – The McGraw-Hill Companies srl.
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Progettare algoritmi.
Didattica e Fondamenti degli Algoritmi e della Calcolabilità Quinta giornata Risolvere efficientemente un problema in P: ancora sulla sequenza di Fibonacci.
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Prof.ssa Rossella Petreschi Lezione del 29/10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 19 del testo Cormen, Leiserson, Rivest,
Fondamenti di Informatica A - Massimo Bertozzi ALBERI E ALBERI BINARI DI RICERCA (BST)
Huffman Canonico: approfondimento. Come abbiamo visto, Huffman canonico ci permette di ottenere una decompressione più veloce e con un uso più efficiente.
Code con priorità Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi e Strutture Dati
Progettare algoritmi veloci usando strutture dati efficienti
Alberi di ricerca di altezza logaritmica
Correzione 1° Esonero Lezione n°13
B-alberi e alberi autoaggiustanti
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Alberi n-ary Lezioni di C.
Algoritmi e Strutture Dati
Progettare algoritmi veloci usando strutture dati efficienti
APPUNTI SUL LINGUAGGIO C Implementazioni di Liste Concatenate
Algoritmi e Strutture Dati
Alberi di ricerca Lezione n°4
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
Lezione n°7 Splay-Trees e Heaps Prof.ssa Rossella Petreschi
concetti ed applicazioni
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Transcript della presentazione:

Heapsort

Introduction to Algorithms, Lecture 5 September 24, 2001 Heap = Albero binario completo che soddisfa la “heap property” Min-heap: i valori dei nodi sono minori dei valori sui nodi figlio ovvero, A[Parent(i)] ≤ A[i] Max-heap: i valori dei nodi sono maggiori dei valori sui nodi figlio ovvero, A[Parent(i)] ≥ A[i] C’è un ordinamento parziale sui valori nei nodi © 2001 by Charles E. Leiserson

Esempio di min-heap e max-heap Immagini da Wikipedia http://upload.wikimedia.org/wikipedia/commons/b/bf/Max-heap.png http://upload.wikimedia.org/wikipedia/commons/6/69/Min-heap.png

Come rappresento una (min/max) heap? Due rappresentazioni: alberi binari oppure array-heap per alberi binari completi A[1] contiene la radice Parent(i) = i/2 Left(i) = 2i mentre Right(i) = 2i+1

Introduction to Algorithms, Lecture 5 September 24, 2001 Rappresentare un max-heap con un array? # elementi heap ≤ # elementi array A[1] contiene la radice Parent(i) = i/2 Left(i) = 2i mentre Right(i) = 2i+1 © 2001 by Charles E. Leiserson

Tipo di Dato Astratto per la Heap template<class Elem,class Comp> class maxheap{ private: Elem* Heap; // Pointer to the heap array int size; // Maximum size of the heap int n; // Number of elems now in heap void siftdown(int); // Put element in place public: maxheap(Elem* h, int num, int max); int heapsize() const; bool isLeaf(int pos) const; int leftchild(int pos) const; int rightchild(int pos) const; int parent(int pos) const; bool insert(const Elem&); bool removemax(Elem&); bool remove(int, Elem&); void buildHeap(); };

Introduction to Algorithms, Lecture 5 September 24, 2001 Gestione delle max-heap Max-heapify mantiene la proprietà di max-heap Build-Max-Heap costruisce un max-heap da zero Heapsort ordina un array sul posto © 2001 by Charles E. Leiserson

Procedura max-heapify Heapify(A,i): ripristina la proprietà di Heap nel sottoalbero radicato in i assumendo che i suoi sottoalberi destro e sinistro siano già degli Heap Input Un array A e un indice i Gli alberi binari con radici Left(i) e Right(i) sono max-heap Ma l’albero binario con radice i non è un max-heap Obiettivo Ripristinare la proprietà di max-heap sul sottoalbero con radice i Far “scendere” l'elemento A[i] nell'array

Esempio di Heapify(a,i) Assumiamo di avere due heap H1 e H2 con radici A[2i] e A[2i+1] (nel caso di implementazione in un vettore) e un nuovo elemento v in posizione i A[i]=v A[2i] A[2i+1] H1 H2

Esempio di Heapify(a,i) Assumiamo che il valore v in posizione i violi la proprietà di heap ovvero, v<A[2i] oppure v<A[2i+1] A[i]=v A[2i] = x A[2i+1] H1 H2

Esempio di Heapify(a,i) Scambia v in posizione i con la più grande delle radici Supponiamo ad esempio che A[2i]≥A[2i+1] A[i]=v A[2i] = x A[2i+1] H1 H2

Esempio di Heapify(a,i) Scambia A[i] con A[2i] A[i]=x A[2i]=v A[2i+1] H1 H2

Esempio di Heapify(A,i) Applica ricorsivamente la procedura di Heapify sul sottoalbero la cui radice è stata scambiata In questo caso si riapplica al sottoalbero di radice 2i, ovvero Heapify(A,2i) A[i]=x Heapify(A,2i) A[2i+1] H1 H2

Pseudocodice max-heapify max-heapify(A, i) l := left(i) r := right(i) if (l ≤ A.heapsize and A[l] > A[i]) then max := l else max := i if (r ≤ A.heapsize and A[r] > A[max]) then max := r if max ≠ i then swap(A, i, max) max-heapify(A, max)

Procedura build-max-heap() Principio generale Sia A[1..N] un array da ordinare I nodi A[N/2+1..N] sono foglie dell'albero e quindi heap di un elemento da cui iniziare La procedura build-max-heap() attraversa i restanti nodi dell'albero ed esegue max-heapify() build-max-heap(A) A.heapsize := A.length for(i=A.length/2; i>=1; i--) max-heapify(A, i);

Heapsort Intuizione Il primo elemento dello heap è sempre il massimo Andrebbe collocato nell'ultima posizione L'elemento in ultima posizione? Viene messo in testa Chiama max-heapify() su n-1 elementi, per ripristinare la situazione heapsort(A) // array di n elementi build-max-heap(A) for (i=n; n>=2; i--) swap(A, 1, i) A.heapsize := A.heapsize-1 max-heapify(A, 1)

Animazione Heapsort Animazione del heapsort da Wikipedia http://en.wikipedia.org/wiki/Heapsort http://de.wikipedia.org/wiki/Image:Sorting_heapsort_anim.gif

Introduction to Algorithms, Lecture 5 September 24, 2001 Code di priorità memorizzano insiemi di oggetti a cui è associata una priorità restituisce l’elemento di priorità maggiore Esempio: sistema operativo multitasking, i job in esecuzione hanno diverse priorità Implementazione: max-heap © 2001 by Charles E. Leiserson

Operazioni su Code di Max Priorità insert(S, x) inserisce l'elemento x nella coda maximum(S) restituisce l'elemento in S con priorità più alta extract-max(S): rimuove e restituisce l'elemento in S con priorità più alta increase-priority(S, x, k): aumenta la priorità di x al nuovo valore k, dove k>x.p

Introduction to Algorithms, Lecture 5 September 24, 2001 Complessità? Max-heapify, nel caso medio, è Θ(log n) Build-Max-Heap è Θ(log n) Heapsort è Θ(nlog n) max-heap-insert, heap-extract-max, heap-increase-key, ecc. sono O(log n) © 2001 by Charles E. Leiserson

Problemi Problema 1: Considerare i valori memorizzati in un vettore, 1 3 20 32 80 15 22 40 60 93 81 42 Rappresenta una heap? (motivare opportunamente la risposta) Problema 2: Definiamo “invecchiamento” della heap l’operazione con cui è possibile decrementare/incrementare tutte le chiavi della stessa quantità. Esiste un algoritmo banale di complessità Θ(n). Delineare una struttura dati che estendendo il concetto di heap che abbiamo visto permetta di effettuare l’invecchiamento in Θ(1). Problema 3: Implementare una coda FIFO utilizzando una heap. Problema 4: Qual è il numero minimo e massimo di una heap di altezza h? (motivare opportunamente la risposta).

Sommario Heap: albero binario completo che soddisfa la heap property Due implementazioni Alberi binari Array Tre procedure principali (max o min) Max-heapify: mantiene la proprietà di max-heap Build-Max-Heap: costruisce un max-heap da zero Heapsort: ordina un array sul posto Code di priorità Memorizzano insiemi di oggetti con una priorità Implementate tipicamente con una max-heap

Riferimenti Questo materiale è tratto dalle trasparenze del corso Introduction to Algorithms (2005-fall-6046) tenuto dal Prof. Leiserson all’MIT (http://people.csail.mit.edu/cel/) Trasparenze del corso “Algoritmi e Strutture Dati” del prof. Alberto Montresor dell’Università di Trento T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein Introduction to Algorithms, Second Edition, The MIT Press, Cambridge, Massachusetts London, England McGraw-Hill Book Company Queste trasparenze sono disponibili sui siti http://webspace.elet.polimi.it/lanzi http://www.slideshare.net/pierluca.lanzi