Algoritmi e Strutture Dati

Download Report

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