Top Banner
Capitolo 8 Code con priorità Algoritmi e Strutture Dati
71

Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Feb 24, 2019

Download

Documents

doankhanh
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 - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Capitolo 8

Code con priorità

Algoritmi e Strutture Dati

Page 2: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 2

Tipo di dato CodaPriorità (1/2)

Suppongo sempre che mi venga

dato un riferimento diretto

all’elemento da cancellare

Page 3: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 3

Tipo di dato CodaPriorità (2/2)

Operazioni aggiuntive

Applicazioni: gestione code in risorse condivise, gestione

priorità in processi concorrenti, progettazione di algoritmi

efficienti per diversi problemi fondamentali (es: calcolo

cammini minimi in un grafo), ecc.

Page 4: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 4

Quattro implementazioni elementari

1. Array non ordinato

2. Array ordinato

3. Lista non ordinata

4. Lista ordinata

Ci focalizzeremo soltanto sulle operazioni di base.

Page 5: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 5

Array non ordinato

• FindMin: Θ(n) (devo guardare tutti gli elementi)

• Insert: O(1) (inserisco in coda)

• Delete: O(1) (poiché mi viene fornito il riferimento

diretto all’elemento da cancellare, lo posso

cancellare in O(1) sovracopiando l’ultimo elemento)

• DeleteMin: Θ(n) (devo prima cercare il minimo in

Θ(n), poi lo posso cancellare in O(1))

Lo dimensiono sufficientemente grande e tengo traccia del

numero n di elementi nella coda in una variabile di

appoggio

Page 6: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 6

Array ordinato

• FindMin: O(1)

• Insert: O(n) (trovo in Θ(log n) la giusta

posizione, ma poi devo fare O(n) spostamenti)

• Delete: O(n) (devo fare O(n) spostamenti)

• DeleteMin: O(1) (l’elemento minimo è in

fondo all’array, non devo fare spostamenti)

Lo dimensiono sufficientemente grande, lo tengo ordinato

in ordine decrescente e tengo traccia del numero n di

elementi nella coda in una variabile di appoggio

Page 7: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 7

Lista non ordinata

• FindMin: Θ(n) (devo guardare tutti gli elementi)

• Insert: O(1) (inserisco in coda o in testa)

• Delete: O(1) (poiché mi viene fornito il

riferimento diretto all’elemento da cancellare, lo

posso cancellare in O(1) agendo sui puntatori)

• DeleteMin: Θ(n) (devo prima cercare il minimo

in Θ(n), poi lo posso cancellare in O(1))

La considero bidirezionale elemento

Page 8: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 8

Lista ordinata

• FindMin: O(1) (il minimo è in testa alla lista)

• Insert: O(n) (trovo in O(n) la giusta posizione, e

poi faccio in O(1) l’inserimento)

• Delete: O(1) (agisco sui puntatori)

• DeleteMin: O(1) (basta far puntare la testa della

lista al secondo elemento della lista stessa)

Tengo la lista bidirezionale ordinata in ordine crescente

Page 9: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 9

Riepilogo implementazioni elementari

FindMin Insert Delete DeleteMin

Array

non ord.

Θ(n) O(1) O(1) Θ(n)

Array

ordinato

O(1) O(n) O(n) O(1)

Lista non

ordinata

Θ(n) O(1) O(1) Θ(n)

Lista

ordinata

O(1) O(n) O(1) O(1)

Page 10: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 10

Tre implementazioni evolute

d-heap: generalizzazione degli heap

binari visti per l’ordinamento

Heap binomiali

Heap di Fibonacci (cenni)

Page 11: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 11

d-heap

Page 12: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 12

Definizione

Un d-heap è un albero radicato d-ario con le seguenti

proprietà:

1. Struttura: è completo almeno fino al penultimo

livello, e tutte le foglie sull’ultimo livello sono

compattate verso sinistra

2. Contenuto informativo: ogni nodo v contiene un

elemento elem(v) ed una chiave chiave(v) presa da

un dominio totalmente ordinato

3. Ordinamento parziale (inverso) dell’heap (min-

heap): chiave(v) ≥ chiave(parent(v)) per ogni nodo

v diverso dalla radice

Page 13: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 13

Esempio

Heap d-ario con 18 nodi e d=3

Page 14: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 14

Proprietà

1. Un d-heap con n nodi ha altezza Θ(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

Page 15: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 15

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) il vecchio amico FixHeap!

Page 16: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 16

findMin

T(n)=O(1)

Page 17: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

insert(elem e, chiave k)

Insert(e,8)

5

16 9

30 17

35 40 20 25

10 15

Page 18: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

insert(elem e, chiave k)

Insert(e,8)

5

16 9

30 17

35 40 20 25

10 15

8

Page 19: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

insert(elem e, chiave k)

Insert(e,8)

5

16 9

30 17

35 40 20 25

15

10

8

Page 20: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

insert(elem e, chiave k)

Insert(e,8)

5

16

30 17

35 40 20 25

15

10

9

8

Page 21: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

insert(elem e, chiave k)

Insert(e,8)

5

16

30 17

35 40 20 25

15

10

9

8

Page 22: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 22

insert(elem e, chiave k)

T(n)=O(logd n) per l’esecuzione di muoviAlto

Page 23: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

delete(elem e) e deleteMin

5

16

30 17

35 40 20 25

15

10

9

8

delete

Page 24: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

delete(elem e) e deleteMin

5

16

30 17

35 40 20 25

15 9

10

Page 25: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

delete(elem e) e deleteMin

5

16

30 17

35 40 20 25

15

9

10

Page 26: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

delete(elem e) e deleteMin

5

16

30 17

35 40 20 25

15

9

10

Page 27: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

delete(elem e) e deleteMin

5

16

30 17

35 40 20 25

15

10

9

8 delete

Page 28: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

delete(elem e) e deleteMin

5

16

30

35 40 20 25

15 9

8

10

Page 29: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

delete(elem e) e deleteMin

5

30

35 40 20 25

15 9

8

16

10

Page 30: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

delete(elem e) e deleteMin

5

30

35 40 20 25

15 9

8

16

10

Page 31: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 31

delete(elem e) e deleteMin

T(n)= O(logd n) o O(d logd n) per l’esecuzione di muoviAlto

o muoviBasso

Può essere usata anche per implementare la

cancellazione del minimo, con costo O(d logd n)

Page 32: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 32

decreaseKey(elem e, chiave d)

5

16

30 17

35 40 20 25

15

10

9

8 decrementa

di 27

Page 33: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 33

decreaseKey(elem e, chiave d)

5

16

17

35 40 20 25

15

10

9

8

3

Page 34: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 34

decreaseKey(elem e, chiave d)

5

17

35 40 20 25

15

10

9

8

16

3

Page 35: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 35

decreaseKey(elem e, chiave d)

17

35 40 20 25

15

10

9

8

16

5

3

Page 36: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 36

decreaseKey(elem e, chiave d)

17

35 40 20 25

15

10

9

8

16

5

3

Page 37: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 37

decreaseKey(elem e, chiave d)

T(n)=O(logd n) per l’esecuzione di muoviAlto

Page 38: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

increaseKey(elem e, chiave d)

5

16

30 17

35 40 20 25

15

10

9

8

incrementa

di 14

Page 39: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

increaseKey(elem e, chiave d)

5

30 17

35 40 20 25

15

10

9

8 30

Page 40: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

increaseKey(elem e, chiave d)

5

30

35 40 20 25

15

10

9

8 17

30

Page 41: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

increaseKey(elem e, chiave d)

5

30

35 40 25

15

10

9

8 17

20

30

Page 42: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

increaseKey(elem e, chiave d)

5

30

35 40 25

15

10

9

8 17

20

30

Page 43: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 43

increaseKey(elem e, chiave d)

T(n)=O(d logd n) per l’esecuzione di muoviBasso

Page 44: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 44

merge(CodaPriorità c1, CodaPriorità c2) Analogamente a quanto mostrato per l’heap binario, la

creazione di un heap d-ario (con d costante) di n elementi

può essere eseguita in Θ(n). Infatti, il tempo di esecuzione

di heapify diventa ora:

T(n)= d T(n/d)+O(d logdn)

ove il fattore O(d logdn) è relativo all’esecuzione della

procedura muoviBasso (fixheap nell’heap binario).

Siamo quindi di nuovo nel Caso 1 del Teorema Master:

Il merge viene quindi eseguito in Θ(n), ove n=|c1|+|c2|, generando

un nuovo heap d-ario che contiene tutti gli elementi in c1 e c2

d logdn=f(n)=O(n ) per >0, e quindi T(n) = Q(n ) = Θ(n) logdd logdd -

Page 45: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 45

Esercizio

Fornire un’implementazione alternativa

dell’operazione di merge, analizzandone la

convenienza asintotica rispetto

all’implementazione appena fornita.

Page 46: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl 46

Soluzione esercizio di approfondimento

Fornire un’implementazione alternativa dell’operazione di merge(CodaPriorità c1, CodaPriorità c2), analizzandone la convenienza asintotica rispetto all’implementazione appena fornita (di costo Q(n)).

Soluzione: Sia k=min{|c1|,|c2|}. Inseriamo ad uno ad uno tutti gli elementi della coda più piccola nella coda più grande; questo costa O(k log n), dove n=|c1|+|c2|. L’approccio conviene quindi per k log n=o(n), cioè per

k=o(n/log n).

Page 47: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Capitolo 8

Code con priorità:

Heap binomiali

Algoritmi e Strutture Dati

Page 48: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Riepilogo

Find

Min

Insert Delete DelMin Incr.

Key

Decr.

Key

merge

Array non

ord.

Θ(n) O(1) O(1) Θ(n) O(1) O(1) O(n)

Array

ordinato

O(1) O(n) O(n) O(1) O(n) O(n) O(n)

Lista non

ordinata

Θ(n) O(1) O(1) Θ(n) O(1) O(1) O(1)

Lista

ordinata

O(1) O(n) O(1) O(1) O(n) O(n) O(n)

d-Heap

O(1) O(logdn) O(d logdn) O(d logdn) O(d logdn) O(logdn) O(n)

Il nostro obiettivo è implementare una coda di priorità con una

struttura dati che non comporti costi lineari!

Page 49: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

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,

ponendo la radice dell’uno come figlia della radice

dell’altro

Page 50: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Proprietà strutturali

Dimostrazione per induzione su h

Page 51: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Definizione di heap binomiale

Un heap binomiale è una foresta di alberi binomiali

che gode delle seguenti proprietà:

1. Unicità: per ogni intero i≥0, esiste al più un Bi

nella foresta

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 da una delle radici

Page 52: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

52

10

25 12

18

1

29 14

38

6

17 11

27

8

Un esempio di Heap

Binomiale con

n=13 nodi

in questa

direzione è

presente un

ordinamento

in questa direzione non è

presente un ordinamento

domanda: quanti alberi binomiali può avere

al massimo un heap binomiale con n nodi?

Page 53: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Proprietà topologiche

• Dalla proprietà di unicità degli alberi

binomiali che lo costituiscono, ne deriva che

un heap binomiale di n elementi è formato

dagli alberi binomiali Bi0, Bi1, …, Bih,, dove i0,

i1,…, ih corrispondono alle posizioni degli 1

nella rappresentazione in base 2 di n.

Ne consegue che in un heap binomiale con n

nodi, vi sono al più log n alberi binomiali,

ciascuno con grado ed altezza O(log n)

Page 54: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

54

10

25 12

18

1

29 14

38

6

17 11

27

8

Un esempio di Heap

Binomiale con

n=13 nodi

13=20+22+23

13 in binario: 1101

B0 B2 B3

Page 55: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

una rappresentazione

collegata

Page 56: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Procedura ausiliaria

Utile per ripristinare la proprietà di unicità in un heap

binomiale (ipotizziamo di scorrere la lista delle radici da

sinistra verso destra, in ordine crescente rispetto all’indice

degli alberi binomiali)

T(n): lineare nel numero di alberi binomiali in input

(ogni fusione diminuisce di uno il numero di alberi binomiali)

Page 57: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Ristruttura(H)

12

25

7

33 28

41

15 18

37

3

18 25

7

33 28

41

15 12

37

3

18

25

7 33 28

41

15 12

37

3

18

25

7

33 28

41

15

12

37

3

H

Page 58: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Realizzazione (1/3)

Page 59: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Realizzazione (2/3)

Page 60: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

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

Page 61: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

DeleteMin(H)

H 1

25

7

33 28

41

15

18

37

3

12

Page 62: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

DeleteMin(H)

12

25

7

33 28

41

15 18

37

3

18 25

7

33 28

41

15 12

37

3

18

25

7 33 28

41

15 12

37

3

18

25

7

33 28

41

15

12

37

3

H

ristruttura fondi

25

7

33 28

41

15

18

37

3

12

Page 63: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

63

10

25 12

18

1

29 14

38

6

17 11

27

8

…decremento di una chiave

decrKey(10)

10

25 12

18

1

29 14

38

6

17 1

27

8

Page 64: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

…decremento di una chiave

10

25 12

18

1

29 14

38

6

17 8

27

1

10

25 12

18

1

29 14

38

1

17 8

27

6

Page 65: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

12

25

7

33 28

41

15

merge(H1,H2) 18

37

3

12

25

7

33 28

41

15 18

37

3

18 25

7

33 28

41

15 12

37

3

18

25

7 33 28

41

15 12

37

3

18

25

7

33 28

41

15

12

37

3

H2

H1

ristruttura fondi

Page 66: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Heap di Fibonacci

(Fredman,Tarjan, 1987)

Page 67: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Heap di Fibonacci Heap binomiale rilassato: si ottiene da un heap binomiale

rilassando la proprietà di unicità dei Bi ed utilizzando

un atteggiamento 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 indebolendo 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, cioè

dividendo il costo complessivo della sequenza di

operazioni per il numero di operazioni della sequenza

Page 68: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Conclusioni: tabella riassuntiva

L’analisi per d-Heap e Heap Binomiali è nel caso

peggiore, mentre quella per gli Heap di Fibonacci è

ammortizzata (per le operazioni asteriscate)

FindMin Insert Delete DelMin IncKey DecKey merge

d-Heap

(d cost.)

O(1) O(log n) O(log n) O(log n) O(log n) O(log n) O(n)

Heap

Binom.

O(log n) O(log n) O(log n) O(log n) O(log n) O(log n) O(log n)

Heap

Fibon.

O(1) O(1) O(log n)* O(log n)* O(log n)* O(1)* O(1)

Page 69: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Analisi ammortizzata • Il costo ammortizzato di un’operazione è il costo “medio”

rispetto a una sequenza qualsiasi di operazioni.

• Esempio: se un’operazione ha costo ammortizzato costante e eseguo una sequenza(qualsiasi) di k opearazioni è possibile che il costo di una singola operazione può non essere costante, ma l’intera sequenza costerà O(k)

• Diverso dal costo medio: non c’è nessuna distribuzione di probabilità (sulla sequenza da eseguire) e l’algoritmo è un algoritmo deterministico

• Molto utile quando si vogliono buone prestazioni sull’intera sequenza e non garanzie sulla singola operazione – esempio: progettare algoritmi veloci attraverso strutture dati

efficienti

Page 70: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

…per esempio nel nostro caso:

Teorema

Usando un Heap di Fibonacci , una qualsiasi sequenza di

n insert, d delete, f findMin, m deleteMin, increaseKey,

decreaseKey, merge prende tempo (nel caso peggiore)

O(n+f+++(d+m+)log n )

Page 71: Algoritmi e Strutture Dati - Dipartimento di Matematica -UTV-guala/cap8_2016.pdf · Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano insert(elem e,

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Esercizio (di manipolazione)

Creare ed unire 2 Heap Binomiali sui seguenti

insiemi:

A1={3,5,7,21,2,4}

A2={1,11,6,22,13,12,23,31}