SlideShare a Scribd company logo
1 of 26
Code di Priorità
Algoritmi e Calcolo Parallelo

Prof. Pier Luca Lanzi
Riferimenti

•

•

2

Bertossi Alan A., Montresor Alberto. “Algoritmi e
strutture di dati” (seconda edizione), CittàStudi 2010

Stanley B. Lippman, Barbara E. Moo, Josee Lajoie
“C++ Primer”, 5th Edition Addison-Wesley

Prof. Pier Luca Lanzi
Code con Priorità

•

•
•

3

Una struttura dati detta heap che mantiene dati in modo
parzialmente ordinato

Code con priorità
Gli elementi sono estratti in base alla loro priorità



Heapsort
Algoritmo di ordinamento
Costo computazionale: O(n log n)
Ordinamento sul posto





Prof. Pier Luca Lanzi
Alberi Binari

4

• Albero binario perfetto • Albero binario
 Tutte le foglie hanno la


stessa altezza h
I nodi interni hanno due
figli (sono di grado 2)

• Un albero perfetto

 Ha altezza log N
 Un albero di altezza h,
contiene 2h+1-1

Prof. Pier Luca Lanzi

completo

 Tutte le foglie hanno



profondità h o h-1
Tutti i nodi a livello h
sono “accatastati” a
sinistra
Tutti i nodi interni hanno
grado 2, eccetto al più
uno
Heap = Albero binario completo
che soddisfa la “heap property”
Min-heap: i valori dei nodi sono minori dei valori sui nodi
figlio ovvero, A[Parent(i)] ≤ A[i]

Max-heap: i valori dei nodi sono maggiori dei
valori sui nodi figlio ovvero, A[Parent(i)] ≥ A[i]
C’è un ordinamento parziale sui valori nei nodi

Prof. Pier Luca Lanzi
Esempio di min-heap e max-heap

Immagini da Wikipedia
http://upload.wikimedia.org/wikipedia/commons/b/bf/Max-heap.png
http://upload.wikimedia.org/wikipedia/commons/6/69/Min-heap.png
Prof. Pier Luca Lanzi

6
Come rappresento una (min/max) heap?

7

Due rappresentazioni: alberi binari oppure
array-heap per alberi binari completi

•
•
•

A[1] contiene la radice
Parent(i) = i/2
Left(i) = 2i mentre Right(i) = 2i+1
Prof. Pier Luca Lanzi
Rappresentare un max-heap con un array?

# elementi heap ≤ # elementi array
A[1] contiene la radice
Parent(i) = i/2

Left(i) = 2i mentre Right(i) = 2i+1

Prof. Pier Luca Lanzi
Gestione delle max-heap
Max-heapify
mantiene la proprietà di max-heap
Build-Max-Heap
costruisce un max-heap da zero
Heapsort
ordina un array sul posto
Prof. Pier Luca Lanzi
Procedura Max-heapify

•
•

•

10

Heapify(A,i): ripristina la proprietà di Heap nel sottoalbero
radicato in i assumendo che i suoi sottoalberi destro e sinistro
siano già degli Heap
Input
Un array A e un indice i
Gli alberi binari con radici Left(i) e Right(i)
sono max-heap
Ma l’albero binario con radice i non è un max-heap





Obiettivo
Ripristinare la proprietà di max-heap sul sottoalbero con
radice i
Far “scendere” l'elemento A[i] nell'array




Prof. Pier Luca Lanzi
Esempio di Heapify(a,i)

•

11

Assumiamo di avere due heap H1 e H2 con radici A[2i] e
A[2i+1] (nel caso di implementazione in un vettore) e un
nuovo elemento v in posizione i
A[i]=v
A[2i]

A[2i+1]

H1

H2
Prof. Pier Luca Lanzi
Esempio di Heapify(a,i)

•

12

Assumiamo che il valore v in posizione i violi la proprietà
di heap ovvero, v<A[2i] oppure v<A[2i+1]

A[i]=v
A[2i] = x

A[2i+1]

H1

H2
Prof. Pier Luca Lanzi
Esempio di Heapify(a,i)

•
•

13

Scambia v in posizione i con la più grande delle radici
Supponiamo ad esempio che A[2i]≥A[2i+1]

A[i]=v
A[2i] = x

A[2i+1]

H1

H2
Prof. Pier Luca Lanzi
Esempio di Heapify(a,i)

•

14

Scambia A[i] con A[2i]

A[i]=x
A[2i]=v

A[2i+1]

H1

H2
Prof. Pier Luca Lanzi
Esempio di Heapify(A,i)

•

•

15

Applica ricorsivamente la procedura di Heapify sul
sottoalbero la cui radice è stata scambiata
In questo caso si riapplica al sottoalbero di radice 2i,
ovvero Heapify(A,2i)
A[i]=x

Heapify(A,2i)

A[2i+1]

H1

H2
Prof. Pier Luca Lanzi
Pseudocodice Max-Heapify

16

max-heapify(A, i)
l := left(i)
r := right(i)
if (l ≤ A.heapsize and A[l] > A[i])
then max := l
else max := i
if (r ≤ A.heapsize and A[r] > A[max])
then max := r
if max ≠ i then
swap(A, i, max)
max-heapify(A, max)

Prof. Pier Luca Lanzi
Procedura Build-Max-Heap()

•

•

17

Principio generale
Sia A[1..N] un array da ordinare
I nodi A[ N/2 +1..N] sono foglie dell'albero
e quindi heap di un elemento da cui iniziare




La procedura build-max-heap() attraversa i restanti nodi
dell'albero ed esegue max-heapify()
build-max-heap(A)
A.heapsize := A.length
for(i=A.length/2; i>=1; i--)
max-heapify(A, i);

Prof. Pier Luca Lanzi
Complessità Build-Max-Heap()

•
•

18

Formulazione semplice (Cormen): la procedura maxheapify viene applicata n/2 volte, ottenendo quindi O(n log
n)
Formulazione esatta
La max-heapify applicata a un nodo di altezza h è O(h)
Dato un albero di n elementi, il numero di nodi di
altezza h è n/(2h+1), da cui,




Prof. Pier Luca Lanzi
Heapsort

•

19

Intuizione
Il primo elemento dello heap è sempre il massimo
Andrebbe collocato nell'ultima posizione
L'elemento in ultima posizione? Viene messo in testa
Chiama max-heapify() su n-1 elementi,
per ripristinare la situazione






heapsort(A) // array di n elementi
build-max-heap(A)
for (i=n; n>=2; i--)
swap(A, 1, i)
A.heapsize := A.heapsize-1
max-heapify(A, 1)
Prof. Pier Luca Lanzi
Animazione Heapsort

Animazione del heapsort da Wikipedia
http://en.wikipedia.org/wiki/Heapsort
http://de.wikipedia.org/wiki/Image:Sorting_heapsort_anim.gif
Prof. Pier Luca Lanzi

20
Code di priorità
memorizzano insiemi di oggetti
a cui è associata una priorità
restituisce l’elemento di priorità maggiore
Esempio: sistema operativo multitasking,
i job in esecuzione hanno diverse priorità

Implementazione: max-heap

Prof. Pier Luca Lanzi
Operazioni su Code di Max Priorità

•

•
•
•

22

insert(S, x)
inserisce l'elemento x nella coda

maximum(S)
restituisce l'elemento in S con priorità più alta
extract-max(S):
rimuove e restituisce l'elemento in S con priorità più alta
increase-priority(S, x, k):
aumenta la priorità di x al nuovo valore k, dove k>x.p

Prof. Pier Luca Lanzi
Complessità?
Max-heapify, nel caso medio, è Θ(log n)
Build-Max-Heap è Θ(n)
Heapsort è Θ(nlog n)
max-heap-insert, heap-extract-max,
heap-increase-key, ecc. sono O(log n)
Prof. Pier Luca Lanzi
Problemi

•

24

Problema 1: Considerare i valori memorizzati in un vettore,
1 3 20 32 80 15 22 40 60 93 81 42
Rappresenta una heap? (motivare opportunamente la risposta)

•

•

•

Problema 2: Definiamo “invecchiamento” della heap l’operazione con
cui è possibile decrementare/incrementare tutte le chiavi della stessa
quantità. Esiste un algoritmo banale di complessità Θ(n). Delineare
una struttura dati che estendendo il concetto di heap che abbiamo
visto permetta di effettuare l’invecchiamento in Θ(1).
Problema 3: Scrivere una classe C++ per implementare una coda
FIFO utilizzando una heap.
Problema 4: Qual è il numero minimo e massimo di una heap di
altezza h? (motivare opportunamente la risposta).

Prof. Pier Luca Lanzi
Sommario

•
•
•
•

25

Heap: albero binario completo che soddisfa la heap property
Due implementazioni
Alberi binari
Array




Tre procedure principali (max o min)
Max-heapify: mantiene la proprietà di max-heap
Build-Max-Heap: costruisce un max-heap da zero
Heapsort: ordina un array sul posto





Code di priorità
Memorizzano insiemi di oggetti con una priorità
Implementate tipicamente con una max-heap




Prof. Pier Luca Lanzi
Code di Priorità in C++

•

•

•

26

Disponibili attraverso la classe priority_queue
Metodi disponibili
empty
size
top
push
Pop







Documentazione
http://www.cplusplus.com/reference/stl/priority_queue/



Prof. Pier Luca Lanzi

More Related Content

More from Pier Luca Lanzi

More from Pier Luca Lanzi (20)

Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018
 
DMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparationDMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparation
 
DMTM Lecture 19 Data exploration
DMTM Lecture 19 Data explorationDMTM Lecture 19 Data exploration
DMTM Lecture 19 Data exploration
 
DMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph miningDMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph mining
 
DMTM Lecture 17 Text mining
DMTM Lecture 17 Text miningDMTM Lecture 17 Text mining
DMTM Lecture 17 Text mining
 
DMTM Lecture 16 Association rules
DMTM Lecture 16 Association rulesDMTM Lecture 16 Association rules
DMTM Lecture 16 Association rules
 
DMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluationDMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluation
 
DMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clusteringDMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clustering
 
DMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clusteringDMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clustering
 
DMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clusteringDMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clustering
 
DMTM Lecture 11 Clustering
DMTM Lecture 11 ClusteringDMTM Lecture 11 Clustering
DMTM Lecture 11 Clustering
 
DMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensemblesDMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensembles
 
DMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethodsDMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethods
 
DMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rulesDMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rules
 
DMTM Lecture 07 Decision trees
DMTM Lecture 07 Decision treesDMTM Lecture 07 Decision trees
DMTM Lecture 07 Decision trees
 
DMTM Lecture 06 Classification evaluation
DMTM Lecture 06 Classification evaluationDMTM Lecture 06 Classification evaluation
DMTM Lecture 06 Classification evaluation
 
DMTM Lecture 05 Data representation
DMTM Lecture 05 Data representationDMTM Lecture 05 Data representation
DMTM Lecture 05 Data representation
 
DMTM Lecture 04 Classification
DMTM Lecture 04 ClassificationDMTM Lecture 04 Classification
DMTM Lecture 04 Classification
 
DMTM Lecture 03 Regression
DMTM Lecture 03 RegressionDMTM Lecture 03 Regression
DMTM Lecture 03 Regression
 
DMTM Lecture 01 Introduction
DMTM Lecture 01 IntroductionDMTM Lecture 01 Introduction
DMTM Lecture 01 Introduction
 

Recently uploaded

Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
lorenzodemidio01
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
giorgiadeascaniis59
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
lorenzodemidio01
 

Recently uploaded (18)

Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptx
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 

Algoritmi e Calcolo Parallelo 2012/2013 - Code di Priorita'

  • 1. Code di Priorità Algoritmi e Calcolo Parallelo Prof. Pier Luca Lanzi
  • 2. Riferimenti • • 2 Bertossi Alan A., Montresor Alberto. “Algoritmi e strutture di dati” (seconda edizione), CittàStudi 2010 Stanley B. Lippman, Barbara E. Moo, Josee Lajoie “C++ Primer”, 5th Edition Addison-Wesley Prof. Pier Luca Lanzi
  • 3. Code con Priorità • • • 3 Una struttura dati detta heap che mantiene dati in modo parzialmente ordinato Code con priorità Gli elementi sono estratti in base alla loro priorità  Heapsort Algoritmo di ordinamento Costo computazionale: O(n log n) Ordinamento sul posto    Prof. Pier Luca Lanzi
  • 4. Alberi Binari 4 • Albero binario perfetto • Albero binario  Tutte le foglie hanno la  stessa altezza h I nodi interni hanno due figli (sono di grado 2) • Un albero perfetto  Ha altezza log N  Un albero di altezza h, contiene 2h+1-1 Prof. Pier Luca Lanzi completo  Tutte le foglie hanno   profondità h o h-1 Tutti i nodi a livello h sono “accatastati” a sinistra Tutti i nodi interni hanno grado 2, eccetto al più uno
  • 5. Heap = Albero binario completo che soddisfa la “heap property” Min-heap: i valori dei nodi sono minori dei valori sui nodi figlio ovvero, A[Parent(i)] ≤ A[i] Max-heap: i valori dei nodi sono maggiori dei valori sui nodi figlio ovvero, A[Parent(i)] ≥ A[i] C’è un ordinamento parziale sui valori nei nodi Prof. Pier Luca Lanzi
  • 6. Esempio di min-heap e max-heap Immagini da Wikipedia http://upload.wikimedia.org/wikipedia/commons/b/bf/Max-heap.png http://upload.wikimedia.org/wikipedia/commons/6/69/Min-heap.png Prof. Pier Luca Lanzi 6
  • 7. Come rappresento una (min/max) heap? 7 Due rappresentazioni: alberi binari oppure array-heap per alberi binari completi • • • A[1] contiene la radice Parent(i) = i/2 Left(i) = 2i mentre Right(i) = 2i+1 Prof. Pier Luca Lanzi
  • 8. Rappresentare un max-heap con un array? # elementi heap ≤ # elementi array A[1] contiene la radice Parent(i) = i/2 Left(i) = 2i mentre Right(i) = 2i+1 Prof. Pier Luca Lanzi
  • 9. Gestione delle max-heap Max-heapify mantiene la proprietà di max-heap Build-Max-Heap costruisce un max-heap da zero Heapsort ordina un array sul posto Prof. Pier Luca Lanzi
  • 10. Procedura Max-heapify • • • 10 Heapify(A,i): ripristina la proprietà di Heap nel sottoalbero radicato in i assumendo che i suoi sottoalberi destro e sinistro siano già degli Heap Input Un array A e un indice i Gli alberi binari con radici Left(i) e Right(i) sono max-heap Ma l’albero binario con radice i non è un max-heap    Obiettivo Ripristinare la proprietà di max-heap sul sottoalbero con radice i Far “scendere” l'elemento A[i] nell'array   Prof. Pier Luca Lanzi
  • 11. Esempio di Heapify(a,i) • 11 Assumiamo di avere due heap H1 e H2 con radici A[2i] e A[2i+1] (nel caso di implementazione in un vettore) e un nuovo elemento v in posizione i A[i]=v A[2i] A[2i+1] H1 H2 Prof. Pier Luca Lanzi
  • 12. Esempio di Heapify(a,i) • 12 Assumiamo che il valore v in posizione i violi la proprietà di heap ovvero, v<A[2i] oppure v<A[2i+1] A[i]=v A[2i] = x A[2i+1] H1 H2 Prof. Pier Luca Lanzi
  • 13. Esempio di Heapify(a,i) • • 13 Scambia v in posizione i con la più grande delle radici Supponiamo ad esempio che A[2i]≥A[2i+1] A[i]=v A[2i] = x A[2i+1] H1 H2 Prof. Pier Luca Lanzi
  • 14. Esempio di Heapify(a,i) • 14 Scambia A[i] con A[2i] A[i]=x A[2i]=v A[2i+1] H1 H2 Prof. Pier Luca Lanzi
  • 15. Esempio di Heapify(A,i) • • 15 Applica ricorsivamente la procedura di Heapify sul sottoalbero la cui radice è stata scambiata In questo caso si riapplica al sottoalbero di radice 2i, ovvero Heapify(A,2i) A[i]=x Heapify(A,2i) A[2i+1] H1 H2 Prof. Pier Luca Lanzi
  • 16. Pseudocodice Max-Heapify 16 max-heapify(A, i) l := left(i) r := right(i) if (l ≤ A.heapsize and A[l] > A[i]) then max := l else max := i if (r ≤ A.heapsize and A[r] > A[max]) then max := r if max ≠ i then swap(A, i, max) max-heapify(A, max) Prof. Pier Luca Lanzi
  • 17. Procedura Build-Max-Heap() • • 17 Principio generale Sia A[1..N] un array da ordinare I nodi A[ N/2 +1..N] sono foglie dell'albero e quindi heap di un elemento da cui iniziare   La procedura build-max-heap() attraversa i restanti nodi dell'albero ed esegue max-heapify() build-max-heap(A) A.heapsize := A.length for(i=A.length/2; i>=1; i--) max-heapify(A, i); Prof. Pier Luca Lanzi
  • 18. Complessità Build-Max-Heap() • • 18 Formulazione semplice (Cormen): la procedura maxheapify viene applicata n/2 volte, ottenendo quindi O(n log n) Formulazione esatta La max-heapify applicata a un nodo di altezza h è O(h) Dato un albero di n elementi, il numero di nodi di altezza h è n/(2h+1), da cui,   Prof. Pier Luca Lanzi
  • 19. Heapsort • 19 Intuizione Il primo elemento dello heap è sempre il massimo Andrebbe collocato nell'ultima posizione L'elemento in ultima posizione? Viene messo in testa Chiama max-heapify() su n-1 elementi, per ripristinare la situazione     heapsort(A) // array di n elementi build-max-heap(A) for (i=n; n>=2; i--) swap(A, 1, i) A.heapsize := A.heapsize-1 max-heapify(A, 1) Prof. Pier Luca Lanzi
  • 20. Animazione Heapsort Animazione del heapsort da Wikipedia http://en.wikipedia.org/wiki/Heapsort http://de.wikipedia.org/wiki/Image:Sorting_heapsort_anim.gif Prof. Pier Luca Lanzi 20
  • 21. Code di priorità memorizzano insiemi di oggetti a cui è associata una priorità restituisce l’elemento di priorità maggiore Esempio: sistema operativo multitasking, i job in esecuzione hanno diverse priorità Implementazione: max-heap Prof. Pier Luca Lanzi
  • 22. Operazioni su Code di Max Priorità • • • • 22 insert(S, x) inserisce l'elemento x nella coda maximum(S) restituisce l'elemento in S con priorità più alta extract-max(S): rimuove e restituisce l'elemento in S con priorità più alta increase-priority(S, x, k): aumenta la priorità di x al nuovo valore k, dove k>x.p Prof. Pier Luca Lanzi
  • 23. Complessità? Max-heapify, nel caso medio, è Θ(log n) Build-Max-Heap è Θ(n) Heapsort è Θ(nlog n) max-heap-insert, heap-extract-max, heap-increase-key, ecc. sono O(log n) Prof. Pier Luca Lanzi
  • 24. Problemi • 24 Problema 1: Considerare i valori memorizzati in un vettore, 1 3 20 32 80 15 22 40 60 93 81 42 Rappresenta una heap? (motivare opportunamente la risposta) • • • Problema 2: Definiamo “invecchiamento” della heap l’operazione con cui è possibile decrementare/incrementare tutte le chiavi della stessa quantità. Esiste un algoritmo banale di complessità Θ(n). Delineare una struttura dati che estendendo il concetto di heap che abbiamo visto permetta di effettuare l’invecchiamento in Θ(1). Problema 3: Scrivere una classe C++ per implementare una coda FIFO utilizzando una heap. Problema 4: Qual è il numero minimo e massimo di una heap di altezza h? (motivare opportunamente la risposta). Prof. Pier Luca Lanzi
  • 25. Sommario • • • • 25 Heap: albero binario completo che soddisfa la heap property Due implementazioni Alberi binari Array   Tre procedure principali (max o min) Max-heapify: mantiene la proprietà di max-heap Build-Max-Heap: costruisce un max-heap da zero Heapsort: ordina un array sul posto    Code di priorità Memorizzano insiemi di oggetti con una priorità Implementate tipicamente con una max-heap   Prof. Pier Luca Lanzi
  • 26. Code di Priorità in C++ • • • 26 Disponibili attraverso la classe priority_queue Metodi disponibili empty size top push Pop      Documentazione http://www.cplusplus.com/reference/stl/priority_queue/  Prof. Pier Luca Lanzi

Editor's Notes

  1. \begin{eqnarray*}%x &amp; = &amp; 3\\T(n) &amp; = &amp; O(\sum_{h=0}^{log_2 n} \frac{n}{2^{h+1}} h) \\ &amp; = &amp; O(n \sum_{h=0}^{\infty} \frac{h}{2^{h}} )\\ &amp; = &amp; O(n)\\\end{eqnarray*}