Transcript Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 8 Code con priorità
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
2
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.
Copyright © 2004 - The McGraw - Hill Companies, srl
3
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap
128 64 8 1 6 3 7 72 12 30
A={ 128, 64, 72, 8, 7, 12, 30, 1, 6, 3 } 1 2 3 4 5 6 7 8 9 10 A(6) = 12 Copyright © 2004 - The McGraw - Hill Companies, srl
4
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Memorizzazione di un heap in un vettore
128 64 8 1 6 3 7 72 12 30
Copyright © 2004 - The McGraw - Hill Companies, srl
5
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Struttura dati heap
Rappresentazione ad albero e con vettore posizionale 37 22 31 13 15 25 14 7 3 12 9 vettore posizionale 0 37 22 31 13 15 25 14 1 2 3 4 5 6 7 7 8 3 12 9 9 10 11 sin(i) = 2i des(i) = 2i+1 Se le foglie nell’ultimo livello sono compattate a sinistra, il vettore posizionale ha esattamente dimensione n Copyright © 2004 - The McGraw - Hill Companies, srl
6
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
Parent(i) =
i/2
2i+1
Copyright © 2004 - The McGraw - Hill Companies, srl
7
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 Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano 8
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) Copyright © 2004 - The McGraw - Hill Companies, srl
9
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) 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) 10 Tempo di esecuzione: T(n)= 2T(n/2)+O(log n) T(n) = O(n) 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
11
1. Extract-max(A) 2.
if heap-size(A)<1 then "error" 3.
4.
max=A[1] A[1]=A[heapsize(A)] 5.
6.
7.
heapsize(A)=heapsize(A)-1 HeapFix(1,A) return max
O(log(n))
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
PQ implementate con Heap
max = ??
max = 12 max = Heapify( ) Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
PQ implementate con Heap
13
1. Insert(A,x) 2.
heap-size(A)=heap-size(A)+1 3.
i=heap-size(A) 4.
5.
6.
7.
while i>1 and A[padre(i)]
O(log(n))
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
16
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 Copyright © 2004 - The McGraw - Hill Companies, srl
17
Algoritmi e strutture dati
d-heap
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Copyright © 2004 - The McGraw - Hill Companies, srl
18
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.
3.
Contenuto informativo : ogni nodo v contiene un elemento elem(v) ed una chiave chiave(v) presa da un dominio totalmente ordinato Ordinamento a heap : chiave(v) ≥ chiave(parent(v)) per ogni nodo v diverso dalla radice Copyright © 2004 - The McGraw - Hill Companies, srl
19
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Esempio
Heap d-ario con 18 nodi e d=3 Copyright © 2004 - The McGraw - Hill Companies, srl
20
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Proprietà
1.
2.
Un d-heap con n nodi ha altezza O(log d n) 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 Copyright © 2004 - The McGraw - Hill Companies, srl
21
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(log d n) T(n)=O(d log d n) Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
findMin
22 T(n)=O(1) Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
insert(elem e, chiave k)
23 T(n)=O(log d n) per l’esecuzione di muoviAlto Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
delete(elem e) e deleteMin
24 T(n)=O(d log d n) per l’esecuzione di muoviBasso Può essere usata anche per implementare la cancellazione del minimo Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
decreaseKey(elem e, chiave d)
25 T(n)=O(log d n) per l’esecuzione di muoviAlto Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
increaseKey(elem e, chiave d)
26 T(n)=O(d log d n) per l’esecuzione di muoviBasso Copyright © 2004 - The McGraw - Hill Companies, srl
27
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Heap binomiali
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Alberi binomiali
Un albero binomiale B h 1.
2.
B 0 consiste di un unico nodo Per i≥0, B i+1 è definito ricorsivamente come segue: è ottenuto fondendo due alberi binomiali B con la radice dell’uno come figlia della radice dell’altro i 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 30
Definizione di heap binomiale
Un heap binomiale è una foresta di alberi binomiali con le seguenti proprietà: 1.
2.
Struttura: ogni albero B i binomiale nella foresta è un albero Unicità: per ogni i, esiste al più un B i nella foresta 3.
4.
Contenuto informativo: ogni nodo v contiene un elemento elem(v) ed una chiave chiave(v) presa da un dominio totalmente ordinato Ordinamento a heap: chiave(v) ≥ chiave(parent(v)) per ogni nodo v diverso da una delle radici Copyright © 2004 - The McGraw - Hill Companies, srl
31
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Proprietà
In un heap binomiale con n nodi, vi sono al più log 2 n alberi binomiali , ciascuno con grado ed altezza O(log n) 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 B i , per ogni i ≥ 0 35 Copyright © 2004 - The McGraw - Hill Companies, srl
36
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Heap di Fibonacci
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 B ed utilizzando un atteggimento più “pigro” durante l’operazione insert (perché ristrutturare subito la i foresta quando potremmo farlo dopo?) Heap di Fibonacci: si ottiene da un heap binomiale rilassato rilassando la proprietà di struttura dei B i che non sono più necessariamente alberi binomiali 37 Analisi sofisticata: i tempi di esecuzione sono ammortizzati su sequenze di operazioni Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Conclusioni: tabella riassuntiva
38 L’analisi di dHeap e HeapBinomiale è nel caso peggiore, mentre quella per HeapBinomialeRilassato e HeapFibonacci è ammortizzata Copyright © 2004 - The McGraw - Hill Companies, srl