Top Banner
Heap binari: definizione Code di priorit` a Code di max-priorit` a tramite heap Heap-sort Algoritmi e Strutture Dati Heap Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Universit` a di Camerino A.A. 2006/07 Di Berardini, Merelli Algoritmi e Strutture Dati
37

Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Jan 26, 2019

Download

Documents

vuongdang
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Algoritmi e Strutture DatiHeap

Maria Rita Di Berardini, Emanuela Merelli1

1Dipartimento di Matematica e InformaticaUniversita di Camerino

A.A. 2006/07

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 2: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Heap

Un heap binario e una struttura dati composta da un array chepuo essere considerato come un albero binario quasi completo

16

14 10

8 7

2 4 1

9 34

1

2 3

5 6 7

8 9 10

16 14 10 8 7 9 3 2 4 1A

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 3: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Heap

Ogni nodo dell’albero corrisponde ad un elemento dell’arrayche memorizza il valore del nodo

Quasi completo significa che tutti i livelli, tranne l’ultimo, sonocompleti: possono mancare alcune foglie consecutive a partiredall’ultima foglia a destra

La “quasi” completezza garantisce che l’altezza di un heapcon n nodi e Θ(log2 n)

Vedremo che le operazioni fondamentali sugli heap vengonoeseguite in un tempo che e al piu proporzionale all’altezzadell’heap e, quindi, richiedono un tempo O(log2 n)

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 4: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Heap

Un array che rappresenta un heap binario e un oggetto condue attributi:

length[A] e il numero di elementi (la dimensione) dell’array

heap-size[A] e il numero di elementi dell’heap memorizzatinell’array

La radice dell’albero e A[1] (si trova in posizione 1)

Se i e l’indice di un dato nodo, gli indici del padre parent[i ],del figlio sinistro left[i ] e del figlio destro right[i ] sono bi/2c,2i e 2i + 1

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 5: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Max-heap e min-heap

Esistono due tipi di heap binari: max-heap e min-heap

In entrambi i tipi di heap binario, i valori dei nodi soddisfanouna proprieta le cui caratteristiche dipendono dal tipo di heap

Proprieta del max-heap: in un max-heap ogni nodo i diversodalla radice e tale che A[parent[i ]] ≥ A[i ]

Nota 1: l’elemento piu grande di un max-heap viene memorizzato nellaradice

Nota 2: un sottoalbero di un nodo u contiene nodi il cui valore non e

mai maggiore del valore del nodo u

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 6: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Max-heap e min-heap

Proprieta del min-heap: in un min-heap ogni nodo i diversodalla radice e tale che A[parent[i ]] ≤ A[i ]

Nota 1: l’elemento piu piccolo di un min-heap viene memorizzato nellaradice

Nota 2: un sottoalbero di un nodo u contiene nodi il cui valore non e

mai minore del valore del nodo u

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 7: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Code di Priorita (Priority Queues)

Un coda di priorita e una struttura dati che serve per mantenereun’insieme S di elementi ciascun con un valore detto chiave cherappresenta la sua priorita

Analogamente agli heap, esistono due tipi di code di priorita: codedi max-priorita e code di min-priorita

Una coda di max-priorita supporta le seguenti operazioni:

1 Insert(S , x) inserisce x nell’insieme S

2 Maximum(S) restituisce l’elemento di S con chiave piu grande

3 Extract-Max(S) elimina e restituisce l’elemento di S con chiave piugrande

4 Increase-Key(S , x , k) aumenta il valore della chiave di x al nuovovalore k (qui assumiamo k ≥ dell’attuale valore della chiave di x)

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 8: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Code di Priorita (Priority Queues)

Applicazioni di una coda di max-priorita: programmare i lavorisu un computer condiviso (Job-Scheduling)

La coda di max-priorita tiene traccia dei lavori da svolgere edelle relative priorita

Quando un lavoro e ultimato o interrotto viene selezionato,mediante Extract-Max, il lavoro con priotita piu alta traquelli in attesa

Un nuovo lavoro puo essere aggiunto in qualsiasi momentomediante una Insert

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 9: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Code di Priorita (Priority Queues)

In alternativa, una coda di min-priorita supporta le seguentioperazioni:

1 Insert(S , x) inserisce x nell’insieme S

2 Minimum(S) restituisce l’elemento di S con chiave minima

3 Extract-Min(S) elimina e restituisce l’elemento di S con chiaveminima

4 Decrease-Key(S , x , k) decrementa il valore della chiave di x alnuovo valore k (qui assumiamo k ≤ dell’attuale valore della chiavedi x)

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 10: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Code di Priorita (Priority Queues)

Applicazioni di una coda di min-priorita: simulatore controllato dieventi (event-driven simualtion)

Gli elementi della coda sono gli eventi da simulare; ad ognuno diessi e associata una chiave che rappresenta il tempo in cui l’eventosi verifica

Gli eventi devono essere simulati secondo l’ordine dei loro tempi,questo perche un evento puo generare altri eventi

Ad ogni passaggio il programma seleziona l’evento da simularemediante una Etract-Min

Ogni nuovo evento viene inserito in coda tramite una Insert

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 11: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Vediamo come e possibile implementare una

coda di max-priorita tramite un max-heap

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 12: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Inserimento

16 14 10 8 7 9 3 2 4 1AInsert(A, 15)

16 14 10 8 7 9 3 2 4 1A 151 2 3 4 5 6 7 8 9 10 i=11

16 14 10 8 15 9 3 2 4 1A 7

16 15 10 8 14 9 3 2 4 1A 7

A[parent[i]] < A[i]

1 2 3 4 i=5 6 7 8 9 10 11

1 i=2 3 4 5 6 7 8 9 10 11

A[parent[i]] < A[i]

A[parent[i]] ≥ A[i]

1 2 3 4 5 6 7 8 9 10

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 13: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Max-Heap-Insert(A, x)

Max-Heap-Insert(A, x)heap-size[A] = heap-size[A] + 1. aumentiamo la dimensione dell’heap

i = heap-size[A]A[i ]← xwhile i > 1 or A[parent[i ]] < A[i ]

do scambia A[i ]↔ A[parent[i ]]i ← parent[i ]

Il numero di scambi e pari al piu all’altezza dello heap, quindi

Max-Heap-Insert viene eseguita in un tempo

O(log2 n)

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 14: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Max-Heap-Insert(A, x)

16

14 10

8 7

2 4 1

9 3

15

16

14 10

8

2 4 1

9 315

7

16

10

8

2 4 1

9 3

7

14

15

(a) (b)

(c)

i = 11

i = 5

i = 2

16

10

8

2 4 1

9 314

15

(c)

i = 2

16

10

8

2 4 1

9 3

7

14

15

16

10

8

2 4 1

9 314

15

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 15: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Restituzione del massimo

La seguente procedura implementa l’operazione Maximum inun tempo costante (Θ(1))

Heap-Maximum(A)return A[1]

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 16: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Estrazione del massimo

16

14 10

8 7

2 4 1

9 3

1

14 10

8 7

2 4 1

9 3

16max

1

14 10

8 7

2 4

9 3

Non è un heap Max-Heapify(A,1)

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 17: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Max-Heapify(A, i)

E un importante subroutine per manipolare max-heap

Input: un heap A e un indice i

Max-Heapify(A, i) viene chiamata quando

i sotto-alberi binari con radice left[i ] e right[i ] sono max-heap,

ma A[i ] e piu piccolo dei suoi figli, violando cosı la proprietadel max-heap

Idea: far scendere il valore di A[i ] nel max-heap in modo daripristinare la proprieta desiderata

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 18: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Max-Heapify(A, i)

i

A BHeaps

i 2i 2i+1 4i 4i+3 8i 8i+7

?

A B

HeapHeaps

i

Facciamo scendere ilnodo i nell’albero finoa trovare la sua posizione

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 19: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Max-Heapify(A, i)

14 10

8 7

2 4

1

9 3

1 10

8 7

2 4

14

9 3

8 10

1 7

2 4

14

9 3

8 10

4 7

2 1

14

9 3

max(14, 10) = 14 max(8, 7) = 8

max(2, 4) = 4

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 20: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Max-Heapify(A, i)

Max-Heapify(A, i)l ← left[i ]r ← right[i ]

if l ≤ heap-size[A] and A[l ] > A[i ]then massimo← lelse massimo← i

if r ≤ heap-size[A] and A[r ] > A[massimo]then massimo← r

if massimo 6= ithen scambia A[i ]↔ A[massimo]

Max-Heapify(A, massimo)

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 21: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Max-Heapify(A, i)

14 10

8 7

2 4

1

9 3

1 10

8 7

2 4

14

9 3

8 10

1 7

2 4

14

9 3

8 10

4 7

2 1

14

9 3

Max-Heapfy( )

Max-Heapfy( )

Max-Heapfy( )

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 22: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Costo computazionale di Max-Heapify(A, i)

Il costo di Max-Heapify in un (sotto)albero di dimensione n e pari:

al tempo costante Θ(1) necessario per stabilire il massimo fra glielementi A[i ], A[left(i)] e A[right(i)]

piu il tempo per eseguire Max-Heapify in un sottoalbero con radiceuno dei figli di i

La dimensione di ciascun sottoalbero non supera 2n/3

Il tempo di esecuzione di Max-Heapify puo essere espresso dallaseguente ricorrenza

T (n) ≤ T (2n/3) + Θ(1)

Per il teorema master, la soluzione di questa ricorrenza e O(log2 n)

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 23: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Esercizio

Risolvere la seguente ricorrenza usando il teorema dell’esperto

T1(n) =

{c + T1(2n/3) se n > 1

1 se n = 1

In questo caso, il numero e la dimensione dei sottoproblemi sonopari ad a = 1 e b = 3/2 (n/b = 2/3n implica b = 3/2). Inoltre,logb a = log3/2 1 = 0 e f (n) = c = Θ(1) = Θ(n0) = Θ(nlogb a)

Per il caso 2 del teorema dell’esperto abbiamo che

T1(n) = Θ(nlogb a log2 n) = Θ(log2 n)

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 24: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Estrazione del massimo

Heap-Extract-Max(A)if heap-size[A] < 1

then error “underflow dell’heap”max ← A[1]A[1]← A[heap-size[A]]heap-size[A]← heap-size[A]− 1Max-Heapify(A, 1)return max

Il costo computazionale e dato chiaramente dal costo dellaprocedura Max-Heapify, ossia O(log2 n)

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 25: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Incremento di una chiave

16 14 10 8 7 9 3 2 4 1AIncrease-Key(A, 9, 15)

16 14 10 8 7 9 3 2 15 1A1 2 3 4 5 6 7 8 i=9 10

16 14 10 15 7 9 3 2 8 1A

16 15 10 14 7 9 3 2 8 1A

A[parent[i]] < A[i]

1 2 3 5i=4 6 7 8 9 10

1 i=2 3 4 5 6 7 8 9 10

A[parent[i]] < A[i]

A[parent[i]] ≥ A[i]

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 26: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Heap-Increase-Key(A, i , key)

E molto simile alla Max-Heap-Insert

Heap-Increase-Key(A, i , key)if key < A[i ]

then error “la nuova chiave e piu piccola di quella corrente”

A[i ]← keywhile i > 1 or A[parent[i ]] < A[i ]

do scambia A[i ]↔ A[parent[i ]]i ← parent[i ]

O(log2 n)

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 27: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

inserimentorestituzione del massimoestrazione del massimoincremento di una chiave

Incremento di una chiave

16

14 10

8 7

2 4 1

9 3

(a) (b)

(c)

16

14 10

8 7

2 15 1

9 3

16

14 10

15 7

2 8 1

9 3

(d)

16

15 10

14 7

2 8 1

9 3

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 28: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Costruzione di un heap

Possiamo usare la procedura Max-Heapify dal basso versol’alto (in maniera bottom-up) per convertire un array A[1 . . . n](non “heapizzato”) in un heap

In un albero che rappresenta un heap di n elementi le fogliesono i nodi con indici bn/2c+ 1, bn/2c+ 2, . . . , n

Ciascuno di essi e un heap di un elemento da cui cominciare

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 29: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Costruzione di un heap

1 3

2 7

14 8

4

9 10

16

1

2 3

4 5 6 7

8 9 10

1 3

2 16

14 8

4

9 10

7

1

2 3

4 5 6 7

8 9 10

1 3

14 16

2 8

4

9 10

7

1

2 3

4 5 6 7

8 9 10

(a)

(b) (c)

1 3

2 7

14 8

4

9 10

16

1

2 3

4 5 6 7

8 9 10

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 30: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Costruzione di un heap

16 10

14 7

2 8

4

9 3

1

1

2 3

4 5 6 7

8 9 10

14 10

8 7

2 4

16

9 3

1

1

2 3

4 5 6 7

8 9 10

1 10

14 16

2 8

4

9 3

7

1

2 3

4 5 6 7

8 9 10(d)

(e)

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 31: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Build-Max-Heap(A)

Build-Max-Heap(A)heap-size[A]← length[A]for i ← blength[A]/2c downto 1

do Max-Heapify(A, i)

Il tempo di esecuzione di ogni chiamata di Max-Heapify e (alpiu) O(log2 n). Eseguiamo blength[A]/2c = O(n) chiamate diMax-Heapify. Quindi, il tempo di esecuzione e O(n log2 n)

Possiamo fare di meglio osservando che il tempo di esecuzionedi Max-Heapify varia al variare dell’altezza del nodo nell’heap

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 32: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Build-Max-Heap(A)

Un’analisi piu rigorosa si basa sulle seguenti informazioni:

uno heap di n elementi ha un’altezza blog2 ncper ogni k = 0, . . . , blog2 nc ci sono al piu dn/2k+1e nodi dialtezza k

una chiamata di Max-Heapify su un nodo di altezza k e O(k)

Il costo T (n) di Build-Max-Heap e limitato da

T (n) ≤blog2 nc∑

k=0

d n

2k+1eO(k) = O(

blog2 nc∑k=0

d n

2k+1ek)

poiche O(f1 + f2) = O(f1) + O(f2)

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 33: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Build-Max-Heap(A)

Poniamo

f (n) =blog2 nc∑

k=0

d n2k+1 ek ≤1

blog2 nc∑k=0

n2k k = n

blog2 nc∑k=0

k2k

≤ n∞∑

k=0

k2k = n

∞∑k=0

k(1/2)k

poiche∞∑

k=0

kxk = x/(1− x)2,∞∑

k=0

k(1/2)k = 2 e quindi

blog2 nc∑k=0

d n

2k+1ek ≤ 2n = O(n)

1Poniamo m = n/2k ; allora dn/2k+1e = dm/2e ≤ dm/2e + bm/2c = m = n/2k

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 34: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Build-Max-Heap(A)

Ricapitolando ...

se denotiamo con T (n) il costo totale di Build-Max-Heap, allora

T (n) = O(f (n))

con f (n) =blog2 nc∑

k=0

d n2k+1 ek = O(n)

Per la transitivita della notazione O abbiamo che:

T (n) = O(n)

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 35: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Ordinamento di un heap

16 14 10 8 7 9 3 2 4 1A1 2 3 4 5 6 7 8 9 10

1 14 10 8 7 9 3 2 4 16A1 2 3 4 5 6 7 8 9 10

l’elemento massimo è in posizione 1

“heapizziamo” questa porzione di vettore

14 8 10 4 7 9 3 2 1 16A1 2 3 4 5 6 7 8 9 10

ed ... iteriamo

heap-size

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 36: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Ordinamento di un heap

il secondo elementopiù grade è in posizione 1

“heapizziamo” questa porzione di vettore

iterando n-1 volte otteniamo un vettore ordinato

14 8 10 2 7 9 3 2 4 16A1 2 3 4 5 6 7 8 9 10

14 8 10 4 7 9 3 2 1 16A1 2 3 4 5 6 7 8 9 10

14 8 10 2 7 9 3 2 4 16A1 2 3 4 5 6 7 8 9 10

1 8 10 4 7 9 3 2 14 16A1 2 3 4 5 6 7 8 9 10

14 8 10 2 7 9 3 2 4 16A1 2 3 4 5 6 7 8 9 10

10 8 9 4 7 1 3 2 14 16A1 2 3 4 5 6 7 8 9 10

Di Berardini, Merelli Algoritmi e Strutture Dati

Page 37: Algoritmi e Strutture Dati - Heap - Computer Science Divisioncomputerscience.unicam.it/merelli/algoritmi06/[05]heap.pdf · Heap binari: definizione Code di priorit`a Code di max-priorit`a

Heap binari: definizioneCode di priorita

Code di max-priorita tramite heapHeap-sort

Heapsort(A)

Heapsort(A)Build-Max-Heap(A)

for i ← length[A] downto 2do scambia A[1]↔ A[i ]

heap-size[A]↔ heap-size[A]− 1Max-Heapify(A, 1)

La chiamata di Build-Max-Heap impiega O(n) e ciascunadelle n − 1 di Max-Heapify impiega O(log2 n)

La procedura Heapsort impiega un tempo O(n log2 n)

Di Berardini, Merelli Algoritmi e Strutture Dati