Algoritmi e Strutture Dati Capitolo 8 Code con priorità Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Coda con priorità Una coda con priorità è un tipo di dato che permette di mantenere il minimo (o il massimo) in un insieme di chiavi su cui è definita una relazione d’ordine totale. 2 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap 128 72 64 8 1 7 6 12 30 3 A={ 128, 64, 72, 8, 1 2 3 4 7, 12, 30, 1, 5 6 7 8 6, 9 3 } 10 A(6) = 12 3 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Memorizzazione di un heap in un vettore 128 72 64 8 1 4 7 6 12 30 3 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Struttura dati heap Rappresentazione ad albero e con vettore posizionale sin(i) = 2i des(i) = 2i+1 37 22 31 13 7 15 12 3 25 14 9 vettore posizionale 0 5 37 22 31 13 15 25 14 7 3 12 1 8 9 2 3 4 5 6 7 9 10 11 Se le foglie nell’ultimo livello sono compattate a sinistra, il vettore posizionale ha esattamente dimensione n Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Memorizzazione di un heap in un vettore • Radice posizione 1 • Per ogni nodo in posizione i: left-child(i) posizione 2i right-child(i) posizione 2i+1 • Parent(i) = i/2 6 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Proprietà salienti degli heap 1) Il massimo è contenuto nella radice 2) L’albero ha altezza O(log n) 3) Gli heap con struttura rafforzata possono essere rappresentati in un array di dimensione pari a n 7 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano La procedura fixHeap Se tutti i nodi di H tranne v soddisfano la proprietà di ordinamento a heap, possiamo ripristinarla come segue: fixHeap(nodo v, heap H) if (v è una foglia) then return else sia u il figlio di v con chiave massima if ( chiave(v) < chiave(u) ) then scambia chiave(v) e chiave(u) fixHeap(u,H) Tempo di esecuzione: O(log n) 8 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Estrazione del massimo • Copia nella radice la chiave contenuta nella la foglia più a destra dell’ultimo livello • Rimuovi la foglia • Ripristina la proprietà di ordinamento a heap richiamando fixHeap sulla radice Tempo di esecuzione: O(log n) 9 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Costruzione dell’heap Algoritmo ricorsivo basato sul divide et impera heapify(heap H) if (H è vuoto) then return else heapify(sottoalbero sinistro di H) heapify(sottoalbero destro di H) fixHeap(radice di H,H) Tempo di esecuzione: T(n)= 2T(n/2)+O(log n) T(n) = O(n) 10 dal Teorema Master Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano PQ implementate con Heap 1. Extract-max(A) 2. if heap-size(A)<1 then "error" 3. max=A[1] 4. A[1]=A[heapsize(A)] 5. heapsize(A)=heapsize(A)-1 6. HeapFix(1,A) 7. return max O(log(n)) 11 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano PQ implementate con Heap max = ?? max = max = Heapify( 12 ) Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano PQ implementate con Heap 1. Insert(A,x) 2. heap-size(A)=heap-size(A)+1 3. i=heap-size(A) 4. while i>1 and A[padre(i)]<x 5. do A[i]=A[padre(i)] 6. i=parent(i) 7. A[i]=x O(log(n)) 13 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Tipo di dato CodaPriorità (1/2) 14 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Tipo di dato CodaPriorità (2/2) 15 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Tre implementazioni d-heap: generalizzazione degli heap binari visti per l’ordinamento heap binomiali heap di Fibonacci 16 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano d-heap 17 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizione Un d-heap è un albero radicato d-ario con le seguenti proprietà: 1. Struttura: è completo almeno fino al penultimo livello 2. Contenuto informativo: ogni nodo v contiene un elemento elem(v) ed una chiave chiave(v) presa da un dominio totalmente ordinato 3. Ordinamento a heap: chiave(v) ≥ chiave(parent(v)) per ogni nodo v diverso dalla radice 18 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempio Heap d-ario con 18 nodi e d=3 19 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Proprietà 1. Un d-heap con n nodi ha altezza O(logd n) 2. La radice contiene l’elemento con chiave minima (per via della proprietà di ordinamento a heap) 3. Può essere rappresentato implicitamente tramite vettore posizionale grazie alla proprietà di struttura 20 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Procedure ausiliarie Utili per ripristinare la proprietà di ordinamento a heap su un nodo v che non la soddisfi T(n)=O(logd n) T(n)=O(d logd n) 21 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano findMin T(n)=O(1) 22 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e, chiave k) T(n)=O(logd n) per l’esecuzione di muoviAlto 23 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano delete(elem e) e deleteMin T(n)=O(d logd n) per l’esecuzione di muoviBasso Può essere usata anche per implementare la cancellazione del minimo 24 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano decreaseKey(elem e, chiave d) T(n)=O(logd n) per l’esecuzione di muoviAlto 25 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano increaseKey(elem e, chiave d) T(n)=O(d logd n) per l’esecuzione di muoviBasso 26 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap binomiali 27 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Alberi binomiali Un albero binomiale Bh è definito ricorsivamente come segue: 1. B0 consiste di un unico nodo 2. Per i≥0, Bi+1 è ottenuto fondendo due alberi binomiali Bi con la radice dell’uno come figlia della radice dell’altro 28 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Proprietà strutturali 29 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizione di heap binomiale Un heap binomiale è una foresta di alberi binomiali con le seguenti proprietà: 1. Struttura: ogni albero Bi nella foresta è un albero binomiale 2. Unicità: per ogni i, esiste al più un Bi nella foresta 3. Contenuto informativo: ogni nodo v contiene un elemento elem(v) ed una chiave chiave(v) presa da un dominio totalmente ordinato 4. Ordinamento a heap: chiave(v) ≥ chiave(parent(v)) per ogni nodo v diverso da una delle radici 30 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Proprietà In un heap binomiale con n nodi, vi sono al più log2 n alberi binomiali, ciascuno con grado ed altezza O(log n) 31 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Procedura ausiliaria Utile per ripristinare la proprietà di unicità in un heap binomiale T(n) è proporzionale al numero di alberi binomiali in input 32 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Realizzazione (1/3) 33 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Realizzazione (2/3) 34 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Realizzazione (3/3) Tutte le operazioni richiedono tempo T(n) = O(log n) Durante l’esecuzione della procedura ristruttura esistono infatti al più tre Bi, per ogni i ≥ 0 35 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap di Fibonacci 36 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap di Fibonacci Heap binomiale rilassato: si ottiene da un heap binomiale rilassando la proprietà di unicità dei Bi ed utilizzando un atteggimento più “pigro” durante l’operazione insert (perché ristrutturare subito la foresta quando potremmo farlo dopo?) Heap di Fibonacci: si ottiene da un heap binomiale rilassato rilassando la proprietà di struttura dei Bi che non sono più necessariamente alberi binomiali Analisi sofisticata: i tempi di esecuzione sono ammortizzati su sequenze di operazioni 37 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Conclusioni: tabella riassuntiva L’analisi di dHeap e HeapBinomiale è nel caso peggiore, mentre quella per HeapBinomialeRilassato e HeapFibonacci è ammortizzata 38 Copyright © 2004 - The McGraw - Hill Companies, srl