Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Estendere i linguaggi: i tipi di dato astratti
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
MultiSet, Liste Ordinate
Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Code a priorità (Heap) Definizione
Strutture dati elementari
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.
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 Ordinamenti ottimi.
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.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°13 Heap massimo.
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.
Algoritmi e Strutture Dati
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 Alberi Binari di Ricerca.
Algoritmi e Strutture Dati (Mod. A)
Algoritmi e Strutture Dati Valutazione del tempo di esecuzione degli algoritmi.
Algoritmi e strutture dati
Algoritmi e Strutture Dati IV. Heap e Code di Priorità
tipo astratto, implementazione, algoritmi
Algoritmi e Strutture Dati
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su alberi binari
Heap binari e HeapSort.
Fibonacci Heaps e il loro utilizzo nell’algoritmo di Prim
RB-insert(T, z) // z.left = z.right = T.nil Insert(T, z) z.color = RED // z è rosso. Lunica violazione // possibile delle proprietà degli alberi // rosso-neri.
Heap Ordinamento e code di priorità Ugo de Liguoro.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Esercizi La distanza di hamming tra due interi x e y si definisce come il numero di posizioni nella rappresentazione binaria di x e y aventi bit differenti.
1/32 Algoritmi e Strutture Dati HEAP Anno accademico
1 Un esempio con iteratore: le liste ordinate di interi.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
AlgoLab - Code unificabili Code unificabili con alberi binomiali Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Algoritmi e Strutture Dati Strutture Dati Elementari.
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.
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
1 Un esempio: le liste ordinate di interi. 2 Liste ordinate  OrderedIntList 4 lista ordinata di interi –modificabile.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
Ese 3 (del 31 Marzo 2004). Testo Dare rappresentazione e realizzazione dei metodi della seguente classe QueueWithPriority. Nella risposta, non riportare.
LIP: 22 Marzo 2005 Eccezioni. Eccezioni-Richiami Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
1 Le s-espressioni. 2  Sexpr 4 alberi binari (possibilmente “vuoti”) che hanno sulle foglie atomi (stringhe) 4 sono la struttura dati base del linguaggio.
Esercizio 3. Testo Dare rappresentazione e realizzazione dei metodi della seguente classe QueueWithPriority. Nella risposta, non riportare i commenti.
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Liste Concatenate 28 Marzo Avviso Martedi’ 4 Aprile: Verifica di LIP Per iscriversi (obbligatorio) inviare un e- mail entro venerdi’ 31 Marzo a.
1 Un esempio con iteratore: le liste ordinate di interi.
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 1 Progettare algoritmi.
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
Progettare algoritmi veloci usando strutture dati efficienti
Progettare algoritmi veloci usando strutture dati efficienti
Progettare algoritmi veloci usando strutture dati efficienti
concetti ed applicazioni
Transcript della presentazione:

heap concetti ed applicazioni

maggio 2002ASD - Heap2 heap 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 o eguale di quelle presenti negli eventuali figli non è una struttura ordinata –le visite in ampiezza e in pre- in- post-ordine non forniscono un ordinamento delle chiavi

maggio 2002ASD - Heap3 heap?

maggio 2002ASD - Heap4 max- e min-heap la struttura definita è detta max-heap variante: min-heap –ogni nodo contiene una chiave minore o eguale di quelle presenti negli eventuali figli min-heap

maggio 2002ASD - Heap5 operazioni su un (max-)heap insert chiave –inserisce nuova chiave nello heap occorre mantenere la condizione di heap deleteMax –cancella chiave max dallo heap occorre mantenere la condizione di heap getMax –restituisce la chiave max nello heap non modifica lo heap

maggio 2002ASD - Heap6 rappresentazione degli heap tutte le rappresentazione usate per gli alberi binarie sono ammissibili –rappresentazione collegata, eventualmente con puntatori figli- genitore –rappresentazione tramite array particolarmente efficiente

maggio 2002 rappresentazione tramite array ogni nodo v è memorizzato in posizione p(v) –se v è la radice allora p(v)=0 –se v è il figlio sinistro di u allora p(v)=2p(u)+1 –se v è il figlio destro di u allora p(v)=2p(u)

maggio 2002ASD - Heap8 heap su array vantaggi –grande efficienza in termini di spazio l’occupazione può essere minima –facilità di navigazione genitore i -> figli j –j = 2i + 1, 2i + 2 figlio i -> genitore j –j = (i – 1) / 2 svantaggio –implementazione statica possono essere necessari progressivi raddoppiamenti/dimezzamenti dell’array di supporto

maggio 2002ASD - Heap9 rappresentazione in Java public class Heap { public static final int DEFAULTCAPACITY = 50; private int[] storage; private int size; public Heap() { this(DEFAULTCAPACITY); } public Heap(int dim) { storage = new int[dim]; size = 0; } // metodi…

maggio 2002ASD - Heap10 rappresentazione in Java/2 public boolean isLeaf(int i) { return getLeftIndex(i) >= size; } public boolean isRoot(int i) { return i == 0; } public boolean isEmpty() { return size == 0; } public boolean isFull() { return size == storage.length; }

maggio 2002ASD - Heap11 rappresentazione in Java/3 private int getLeftIndex(int i) { return 2 * i + 1; } private int getRightIndex(int i) { return getLeftIndex(i) + 1; } private int getParentIndex(int i) { return (i - 1) / 2; } public String toString() {…} // implementazione delle operazioni fondamentali }

maggio 2002ASD - Heap12 algoritmi su heap operazioni –getMax –insert –deleteMax altri algoritmi –Array2Heap conversione di un array in heap –HeapSort ordinamento di un array basato su heap

maggio 2002ASD - Heap13 getMax il max è contenuto nella cella 0 dell’array operazione di costo costante O(1) public int getMax() throws Exception { if(!isEmpty()) return storage[0]; else throw new Exception("getMax requested to empty heap"); }

maggio 2002ASD - Heap14 insert 1.inserisci elemento alla fine dello heap 2.while (elemento non è radice) and (elemento > genitore(elemento)) 3.scambia elemento con genitore

maggio 2002ASD - Heap15 insert/2

maggio 2002ASD - Heap16 insert /3 Algorithm insert(int k) { storage[size] = k; int i = size++; int j = getParentIndex(i); while(!isRoot(i) && (storage[i] > storage[j])) { exchange(i, j); // scambia celle di storage i = j; j = getParentIndex(i); }

maggio 2002ASD - Heap17 Heapify(i) operazione heapify(i) considera l'albero avente radice nella cella i e, qualora non rispetti la condizione di heap attraverso una sequenza di scambi while (i non è foglia) and (i < un figlio) scambia i con il suo figlio maggiore

maggio 2002ASD - Heap18 Heapify public void heapify(int i) { if(isLeaf(i)) return; else { int j = 0; // inizializzazione fittizia per tacitare compilatore try { j = getMaxChildIndex(i); } catch(Exception e) { // only if i is a leaf.... already checked } if(storage[i] < storage[j]) exchange(i, j); heapify(j);}

maggio 2002ASD - Heap19 deleteMax 1 1.sostituisci primo elemento con ultima foglia ed elimina ultima foglia 1.Invoca Heapify sulla radice

maggio 2002ASD - Heap20 deleteMax/2

maggio 2002ASD - Heap21 heap e code di priorità una coda di priorità è un tipo astratto con le seguenti operazioni –enqueue, inserimento in coda –dequeue, estrazione dalla coda dell’elemento avente priorità max la priorità è in genere espressa da un intero gli heap sono strutture di dati eccellenti per l’implementazione di code di priorità

maggio 2002ASD - Heap22 Heapsort/1 Ordinamento di un insieme di n interi Costruisci l’Heap inserendo gli elementi nell’Heap con insert. Complessità: O(n log n) Applica ripetutuamente deleteMax Complessità: O(n log n)

maggio 2002ASD - Heap23 Heapsort/2 public static void heapSort(int[] data) { Heap aHeap = array2heap(data); for(int i = aHeap.size - 1; i > 0; i--) { aHeap.exchange(0, i); aHeap.size--; aHeap.heapify(0); } System.arraycopy(aHeap.storage, 0, data, 0, aHeap.storage.length); }

maggio 2002ASD - Heap24 Costruzione di un Heap in O(n)/1 1.Disponi l’insieme di elementi in un array 2.For (i= indice ultimo nodo non foglia; i>=0, i--) 3.Invoca heapify (i) public static Heap array2heap(int[] data) { Heap aHeap = new Heap(data.length); aHeap.size = data.length; System.arraycopy(data, 0, aHeap.storage, 0, data.length); for(int i = aHeap.getParentIndex(aHeap.size-1); i >= 0; i--) aHeap.heapify(i); return aHeap; }

maggio 2002ASD - Heap25

maggio 2002ASD - Heap26 Costruzione di un Heap in O(n)/2 Assumi n=2 k -1, heap di k-1 livelli Heapify invocata (n+1)/2 volte sui nodi dal penultimo livello fino al primo. (n+1)/4 nodi del penultimo livello. Heapify richiede al più 1 scambio (n+1)/2 i di livello k-i-1. Heapify su nodo di livello k-i-1 provoca al più i-1 scambi

maggio 2002ASD - Heap27 Costruzione di un Heap in O(n)/2 Heap di n nodi ha al più lg(n) livelli i-esimo livello dal basso: (n+1)/2 i nodi i-1 scambi compiuti da Heapify