92
1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons Attribution- NonCommercial-ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California,

1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

Embed Size (px)

Citation preview

Page 1: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

1© Alberto Montresor

Algoritmi e Strutture DatiCapitolo 14 - Greedy

Alberto MontresorUniversità di Trento

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Page 2: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

2© Alberto Montresor

Introduzione

✦Gli algoritmi per problemi di ottimizzazione

✦Eseguono una sequenza di decisioni

✦La programmazione dinamica

✦In maniera bottom-up, valuta tutte le decisioni possibili

✦Evitando però di ripetere sotto-problemi (decisioni) già percorse

✦Un algoritmo greedy (ingordo, goloso)

✦Seleziona una sola delle possibili decisioni...

✦... quella che sembra ottima (ovvero, è localmente ottima)

✦Sperabilmente, si ottiene così un ottimo globale

Page 3: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

3© Alberto Montresor

Introduzione

✦Quando applicare la tecnica greedy?

✦Quando è possibile dimostrare che esiste una scelta ingorda✦“Fra le molte scelte possibili, ne può essere facilmente individuata una che porta sicuramente alla soluzione ottima”

✦Quando il problema ha sottostruttura ottima✦“Fatta tale scelta, resta un sottoproblema con la stessastruttura del problema principale”

✦Non tutti i problemi hanno una scelta ingorda

✦Nota:

✦in alcuni casi, soluzioni non ottime possono essere comunque interessanti

Page 4: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

4© Alberto Montresor

Insieme indipendente di intervalliInsieme indipendente di intervalli

✦Problema:

✦Siano dati n intervalli distinti [ai, bi[ della retta reale

✦ trovare un insieme indipendente massimo ✦un sottoinsieme di massima cardinalità formato da intervalli tutti disgiunti tra loro

✦Definizioni:

✦S={ 1, 2,…, n } un insieme di intervalli

✦Ad ogni intervallo i in S sono associati:✦ai → tempo di inizio✦bi → tempo di fine

✦Che relazione c’è con “Insieme indipendente di intervalli pesati”?

1 1 4

2 3 5

3 0 6

4 5 7

5 3 8

6 5 9

7 6 10

8 8 11

9 8 12

10 12 14

i ai bi

Page 5: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

5© Alberto Montresor

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

1

2

3

4

5

6

7

8

9

10

11

Attività

Tempo

Page 6: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

6© Alberto Montresor

1

2

3

4

5

6

7

8

9

10

11

Attività

Tempo

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Page 7: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

7© Alberto Montresor

Come affrontare il problemaCome affrontare il problema

Cerchiamo innanzitutto di risolverlo tramite programmazione dinamica (PD):

Individuiamo una sottostruttura ottima

Scriviamo una definizione ricorsiva per la dimensione della soluzione ottima

Scriviamo una versione iterativa bottom-up dell'algoritmo

Passiamo poi alla tecnica greedy Cerchiamo una possibile scelta ingorda

Dimostriamo che la scelta ingorda porta alla soluzione ottima

Scriviamo un algoritmo ricorsivo o iterativo che effettua semprela scelta ingorda

Page 8: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

8© Alberto Montresor

Sottostruttura ottimaSottostruttura ottima

✦Si assuma che le attività siano ordinate per tempo di fine:

✦b1 ≤ b2 ≤ … ≤ bn

✦Sottoproblema S[i,j]

✦S[i,j] = { k | bi ≤ ak < bk ≤ aj }

✦Il sottoinsieme di attività che

✦iniziano dopo che i ha finito

✦finiscono prima che j abbia iniziato

✦Aggiungiamo due attività“fittizie”:

✦0 → b0 = 0

✦n+1 → an+1 = +∞

✦Così S[0, n+1] corrisponde al problema completo S

✦Domanda

✦Dimostrare che se i ≥ j, allora S[i,j] è vuoto

bi ak bk aj

Page 9: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

9© Alberto Montresor

Sottostruttura ottima: caratterizzazione

✦Se A[i,j] è una soluzione ottimale di S[i,j], e l'attività k è inclusa in A[i,j], allora

✦ Il problema S[i,j] viene suddiviso in due sottoproblemi:✦S[i,k]: le attività di S[i,j] che finiscono prima di k✦S[k,j]: le attività di S[i,j] che iniziano dopo di k

✦ A[i,j] contiene le soluzioni ottimali di S[i,k] e S[k,j]✦A[i,j] ∩ S[i,k] è la soluzione ottimale di S[i,k]✦A[i,j] ∩ S[k,j] è la soluzione ottimale di S[k,j]

✦Dimostrazione:

✦Utilizzando il metodo cut-and-paste

Page 10: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

10

© Alberto Montresor

Definizione ricorsiva

✦Descrizione ricorsiva della soluzione:

✦A[i,j] = A[i,k] { ∪ k } ∪ A[k, j]

✦Come determinare k ? Analizzando tutte le possibilità...

✦Definizione: D[i, j]

✦La dimensione del più grande sottoinsieme A[i,j] ⊆ S[i,j] di attività mutualmente compatibili

✦Come si calcola?

Page 11: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

11

© Alberto Montresor

Verso una soluzione “greedy”

✦La definizione precedente:

✦Ci permette di scrivere un algoritmo basato su programmazione dinamica o su memoization

✦Complessità: θ(n3)

✦Devo risolvere tutti i sottoproblemi con i ≠ j, nel caso peggiore tempo O(n) per un sottoproblema

✦Posso fare di meglio?

✦Avevamo visto una soluzione O(n log n)✦Richiedeva pre-elaborazione

✦Questa soluzione è peggiore, ma...✦Siamo sicuri che sia necessario analizzare tutti i possibili valori per k?

Page 12: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

12

© Alberto Montresor

Teorema: “Greedy choice”Teorema: “Greedy choice”

✦Sia S[i,j] un sottoproblema non vuoto, e m l'attività di S[i,j] con il minor tempo di fine; allora

✦m è compresa in qualche soluzione ottima di S[i,j]

✦Il sottoproblema S[i,m] è vuoto

✦Dimostrazione

✦Conseguenze:

✦Non è più necessario analizzare tutti i possibili valori di k✦Faccio una scelta “ingorda”, ma sicura: seleziono l'attività m con il minor tempo di fine

✦Non è più necessario analizzare due sottoproblemi:✦Elimino tutte le attività che non sono compatibili con la scelta ingorda✦Mi resta solo un sottoproblema da risolvere: S[m,j]

Page 13: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

13

© Alberto Montresor

Realizzazione iterativaRealizzazione iterativa

✦ Complessità

✦ Inserisce la prima attività: è sempre compatibile

✦ Se l'input è già ordinato: θ(n)

✦ Altrimenti, è necessario un passo di ordinamento: θ(n log n)

Page 14: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

14

© Alberto Montresor

1

2

3

4

5

6

7

8

9

10

11

Attività

Tempo

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

i=0

Page 15: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

15

© Alberto Montresor

2

3

4

5

6

7

8

9

10

11

Attività

Tempo

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

i=1

Page 16: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

16

© Alberto Montresor

2

3

4

5

6

7

8

9

10

11

Attività

Tempo

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

i=1

Page 17: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

17

© Alberto Montresor

2

3

4

5

6

7

8

9

10

11

Attività

Tempo

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

i=1

Page 18: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

18

© Alberto Montresor

2

3

1

5

6

7

8

9

10

11

Attività

Tempo

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

i=4

Page 19: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

19

© Alberto Montresor

2

3

1

5

6

7

8

9

10

11

Attività

Tempo

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

i=4

Page 20: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

20

© Alberto Montresor

2

3

1

5

6

7

8

9

10

11

Attività

Tempo

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

i=4

Page 21: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

21

© Alberto Montresor

2

3

1

5

6

7

8

9

10

11

Attività

Tempo

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

i=4

Page 22: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

22

© Alberto Montresor

2

3

1

5

6

7

4

9

10

11

Attività

Tempo

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

i=8

Page 23: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

23

© Alberto Montresor

2

3

1

5

6

7

4

9

10

11

Attività

Tempo

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

i=8

Page 24: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

24

© Alberto Montresor

2

3

1

5

6

7

4

9

10

11

Attività

Tempo

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

i=8

Page 25: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

25

© Alberto Montresor

2

3

1

5

6

7

4

9

10

8

Attività

Tempo

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15i=11

Page 26: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

26

© Alberto Montresor

✦Abbiamo cercato di risolvere il problema della selezione delle attività tramite programmazione dinamica:

✦Abbiamo individuato una sottostruttura ottima

✦Abbiamo scritto una definizione ricorsiva per la dimensione della soluzione ottima

✦Abbiamo dimostrato la proprietà della scelta greedy:

✦Per ogni sottoproblema, esiste almeno una soluzione ottima che inizia con la scelta greedy

✦Abbiamo scritto un algoritmo iterativo che effettua sempre la scelta ingorda

Tecnica greedy – approccio a partire da PD

Page 27: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

27

© Alberto Montresor

Problema del resto

✦Input

✦Un numero intero positivo n

✦Output

✦Il più piccolo numero intero di pezzi per dare un resto di n centesimi utilizzando monete da 50c, 10c, 5c e 1c.

✦Esempi

✦n = 78, 7 pezzi: 50+10+10+5+1+1+1

✦n = 18, 5 pezzi: 10+5+1+1+1

✦Seguiamo la stessa proceduraprecedente:

✦Programmazione dinamica → approccio greedy

Page 28: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

28

© Alberto Montresor

Problema del restoProblema del resto

✦Domanda

✦Descrivere un alg. goloso per dare il resto con le monete specificate✦Sottostruttura ottima✦Scelta ingorda

✦Provare che tale algoritmo fornisce sempre una soluzione ottima

✦Domanda

✦Supponete di avere un insieme di monete i cui valori siano potenze di c: c0, c1, c2, ..., ck

✦L'algoritmo visto in precedenza funziona ancora?

✦Domanda

✦Trovare un insieme di “pezzature” per cui la scelta golosa non è applicabile

Page 29: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

29

© Alberto Montresor

Tecnica greedy – approccio senza passare per PD

✦Evidenziare i “passi di decisione”

✦Trasformare il problema di ottimizzazione in un problema di “scelte” successive

✦Evidenziare una possibile scelta ingorda

✦Dimostrare che tale scelta rispetto il “principio della scelta ingorda”

✦Evidenziare la sottostruttura ottima

✦Dimostrare che la soluzione ottima del problema “residuo” dopo la scelta ingorda può essere unito a tale scelta

✦Scrittura codice: top-down, anche in maniera iterativa

✦Nota: può essere necessario pre-processare l'input

Page 30: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

30

© Alberto Montresor

Algoritmo di scheduling Algoritmo di scheduling

1

4

3

6

✦Definizione:

✦1 processore, n job p1, p2, ..., pn

✦Ogni job pi ha un tempo di esecuzione t[i]

✦Minimizzare il tempo di completamento medio

✦Domanda: Risolvere il problema tramite la tecnica greedy

0

1 43 6

1 4 8 14

14 36

0 54 11 14

(4+5+11+14)/4 = 34/4

(1+4+8+14)/4 = 27/4

Shortest job first

Page 31: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

31

© Alberto Montresor

Zaino

✦Input

✦Un intero positivo C - la capacità dello zaino

✦n oggetti, tali che l’oggetto i-esimo è caratterizzato da: ✦un profitto pi e ✦un volume vi , entrambi interi positivi

✦Zaino (o Zaino 0/1)

✦trovare un sottoinsieme S di {1, . . . , n} di oggetti tale che il volume totale non superi la capacità massima e il profitto totale sia massimo

✦Zaino reale (o Zaino frazionario)

✦E' possibile prendere frazioni di oggetti

Page 32: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

32

© Alberto Montresor

30

10

25€125

€60

€120

3025 €125 + €120 = €245

55

Scegli per primo l’oggetto che ha profitto più alto

p[] v[]

C

Page 33: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

33

© Alberto Montresor

30

10

25€125

€60

€120

3025

2530

€125 + €120 = €245

55

€120 + €125 = €245

Scegli per primo l’oggetto che ha profitto più alto

Scegli per primo l’oggetto che ha volume più alto

p[] v[]

C

Page 34: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

34

© Alberto Montresor

30

10

25€125

€60

€120

3025

€6 per litro

€5 per litro

€4 per litro

10

2530

25 20/30

€125 + €120 = €245

55

€120 + €125 = €245

€60 + €120 + €80 = €260

Scegli per primo l’oggetto che ha il più alto “profitto specifico”

p[] v[]

C

Scegli per primo l’oggetto che ha profitto più alto

Scegli per primo l’oggetto che ha volume più alto

Page 35: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

35

© Alberto Montresor

Problema dello zainoProblema dello zaino

✦Domanda:

✦Dimostrare che il problema dello Zaino Reale gode della scelta greedy

✦Dimostrare che il problema dello Zaino 0-1 non gode di scelta greedy

✦In altre parole:

✦Risolvere il problema dello Zaino Reale con programmazione dinamica è inutile e costoso

✦Risolvere il problema dello Zaino 0-1 con tecnica greedy è scorretto

Page 36: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

36

© Alberto Montresor

Zaino reale

✦Complessità

✦O(n log n) per l’ordinamento

✦O(n) per la scelta dei valori

Page 37: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

37

© Alberto Montresor

Problema della compressione

✦Rappresentare i dati in modo efficiente

✦Impiegare il numero minore di bit per la rappresentazione

✦Goal: risparmio spazio su disco e tempo di trasferimento

✦Una possibile tecnica di compressione: codifica di caratteri

✦Tramite funzione di codifica f: f(c) = x✦c è un possibile carattere preso da un alfabeto Σ✦x è una rappresentazione binaria✦“c è rappresentato da x”

Page 38: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

38

© Alberto Montresor

Codici di Huffman

✦Supponiamo di avere un file di n caratteri

✦Composto dai caratteri: a b cd e f

✦Con le seguenti frequenze: 45% 13% 12% 16% 9% 5%

✦Codifica tramite ASCII (8 bit per carattere)

✦Dimensione totale: 8n bit

✦Codifica basata sull'alfabeto (3 bit per carattere)

✦Codifica: 000 001010 011 100 101

✦Dimensione totale: 3n bit

✦Possiamo fare di meglio?

Page 39: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

39

© Alberto Montresor

Codici di HuffmanCodici di Huffman

✦Codifica a lunghezza variabile

✦Caratteri: a b c d ef

✦Codifica: 0 101 100 1111101 1100

✦Costo totale: (0.45 1+0.13 3+0.12 3+0.16 3+0.09 4+0.05 4)⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅n=2.24n

✦Codice “a prefisso” (meglio, “senza prefissi”):

✦Nessun codice è prefisso di un altro codice

✦Condizione necessaria per permettere la decodifica

✦Esempio: ADDAABCA

✦0·111·111·0·0·101·100·0

Considerate questo codice:f(a) = 1, f(b)=10, f(c)=11

Page 40: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

40

© Alberto Montresor

Codici di HuffmanCodici di Huffman

Alcune domande E' possibile che il testo codificato sia più lungo della rappresentazione con 3 bit?

Esistono testi “difficili” per una rappresentazione di questo tipo?

Come organizzare un algoritmo per la decodifica?

Come organizzare un algoritmo per la codifica è il tema dei lucidi seguenti

Cenni storici David Huffman, 1952

Algoritmo ottimo per costruire codici prefissi

Utilizzato in PKZIP

Page 41: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

41

© Alberto Montresor

Rappresentazione ad albero per la decodificaRappresentazione ad albero per la decodifica

✦Rappresentazione come alberi binari

✦Figlio sinistro: 0 Figlio destro: 1

✦Caratteri dell'alfabeto sulle foglie

b

a

c e

0 1

0 1

0 1

0

1

d

0

Algoritmo di decodifica:

1. parti dalla radice2. leggi un bit alla volta percorrendo l'albero: 0: sinistra 1: destra3. stampa il carattere della foglia4. torna a 1

a: 00b: 010c: 011d: 100e: 101

Page 42: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

42

© Alberto Montresor

Rappresentazione ad albero per la decodificaRappresentazione ad albero per la decodifica

✦Non c'è motivo di avere un nodo interno con un solo figlio

✦Il “figlio unico” può essere sostituito al proprio genitore✦Sia che sia una foglia che un nodo interno

Spazio sprecato

0 1

0 1

0 1

0

10

a

b ec d

a: 00b: 010c: 011d: 100e: 101

Page 43: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

43

© Alberto Montresor

Rappresentazione ad albero per la decodificaRappresentazione ad albero per la decodifica

Non c'è motivo di avere un nodo interno con un solo figlio Il “figlio unico” può essere sostituito al proprio genitore

Sia che sia una foglia che un nodo interno

0 1

0 1

0 1

10

In questo albero ogni nodo interno ha due figli

a: 00b: 010c: 011d: 10e: 11

a: 00b: 010c: 011d: 100e: 101

a

b

e

c

d

Page 44: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

44

© Alberto Montresor

Definizione formale del problema

✦Definizione: codice ottimo

✦Dato un file F, un codice C è ottimo per F se non esiste un altro codice tramite il quale F possa essere compresso impiegando un numero inferiore di bit.

✦Nota:

✦Il codice ottimo dipende dal particolare file

✦Possono esistere più soluzioni ottime

✦Nota:

✦I codici a prefisso ottimi sono rappresentati da un albero in cui tutti i nodi interni hanno due figli

Page 45: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

45

© Alberto Montresor

Definizione formale del problemaDefinizione formale del problema

✦Supponiamo di avere:

✦un file F composto da caratteri nell’alfabeto Σ

✦un albero T che rappresenta la codifica

✦Quanti bit sono richiesti per codificare il file?

✦Per ogni c Σ, sia ∈ dT(c) la profondità della foglia che rappresenta c

✦Il codice per c richiederà allora dT(c) bit

✦Se f [c] è il numero di occorrenze di c in F, allora la dimensione della codifica è

Page 46: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

46

© Alberto Montresor

Algoritmo di Huffman

✦Principio del codice di Huffman

✦Minimizzare la lunghezza dei caratteri che compaiono più frequentemente

✦Assegnare ai caratteri con la frequenza minore i codici corrispondenti ai percorsi più lunghi all’interno dell’albero

✦Un codice è progettato per un file specifico

✦Si ottiene la frequenza di tutti i caratteri

✦Si costruisce il codice

✦Si rappresenta il file tramite il codice

✦Si aggiunge al file una rappresentazione del codice

Page 47: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

47

© Alberto Montresor

Costruzione del codiceCostruzione del codice

f : 5e : 9c : 12b : 13d : 16a : 45

Passo 1: Costruire una lista ordinata di nodi foglia per ogni carattere, etichettato con la propria frequenza

Page 48: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

48

© Alberto Montresor

Costruzione del codiceCostruzione del codice

c : 12b : 13d : 16a : 45

f : 5 e : 9

14

Passo 2: Rimuovere i due nodi “più piccoli” (con frequenze minori)

Passo 3: Collegarli ad un nodo padre etichettato

con la frequenza combinata (sommata)

Page 49: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

49

© Alberto Montresor

Costruzione del codiceCostruzione del codice

c : 12b : 13 d : 16a : 45

f : 5 e : 9

14

Passo 4: Aggiungere il nodo combinato alla lista.

Page 50: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

50

© Alberto Montresor

Costruzione del codiceCostruzione del codice

Ripetere i passi 2-4 fino a quando non resta un solo nodo nella lista

f : 5 e : 9 c : 12 b : 13

d : 16 a : 45 14 25

Page 51: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

51

© Alberto Montresor

Costruzione del codiceCostruzione del codice

Ripetere i passi 2-4 fino a quando non resta un solo nodo nella lista

c : 12 b : 13 d : 16

a : 45 25 30

f : 5 e : 9

14

Page 52: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

52

© Alberto Montresor

Costruzione del codiceCostruzione del codice

a : 45 55

c : 12 b : 13 d : 16

25 30

f : 5 e : 9

14

Ripetere i passi 2-4 fino a quando non resta un solo nodo nella lista

Page 53: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

53

© Alberto Montresor

Costruzione del codiceCostruzione del codice

Al termine, si etichettano gli archi dell'albero con bit 0-1

a

100

55

c b d

25 30

f e

14

0

0

0 0

0

1

1

1 1

1

Page 54: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

54

© Alberto Montresor

Algoritmo in pseudo-codiceAlgoritmo in pseudo-codice

Tree:

f // frequenza (key) c // carattere left // figlio sinistro right // figlio destro

Complessitàθ(n log n)

Page 55: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

55

© Alberto Montresor

Dimostrazione di correttezza

✦Teorema: L'output dell'algoritmo Huffman per un dato file è un codice a prefisso ottimo

✦Schema della dimostrazione:

✦Sottostruttura ottima✦Dato un problema sull'alfabeto Σ, è possibile costruire un sottoproblema con un alfabeto più piccolo

✦Proprietà della scelta greedy✦Scegliere i due elementi con la frequenza più bassa conduce sempre ad una soluzione ottimale

Page 56: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

56

© Alberto Montresor

Scelta greedy

✦Sia

✦Σ un alfabeto, f un array di frequenze

✦x, y i due caratteri che hanno frequenza più bassa

✦Allora

✦Esiste un codice prefisso ottimo per Σ in cui x,y hanno la stessa profondità massima e i loro codici differiscono solo per l'ultimo bit

✦Dimostrazione

✦Al solito, basata sulla trasformazione di una soluzione ottima

✦Supponiamo che esistano due caratteri a,b con profondità massima e questi siano diversi da x,y

Page 57: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

57

© Alberto Montresor

Scelta greedyScelta greedy

✦Assumiamo (senza perdere in generalità): f[x] ≤ f[y] f[a] ≤ f[b]

✦Poiché le frequenze di x e y sono minime: f[x] ≤ f[a] f[y] ≤ f[b]

✦Scambiamo x con a: otteniamo T'

✦Scambiamo y con b: otteniamo T"

y

x

a b

T

y

a

x b

T'

b

a

x y

T"

...... ...

Page 58: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

58

© Alberto Montresor

Scelta greedyScelta greedy

✦Dimostriamo che:

✦C(f,T '') ≤ C(f, T ') ≤ C(f,T)

✦Ma poiché T è ottimo, sappiamo anche che:

✦C(f,T) ≤ C(f,T '')

✦Quindi T'' è anch'esso ottimo

Page 59: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

59

© Alberto Montresor

Sottostruttura ottima

✦Sia

✦Σ un alfabeto, f un array di frequenze

✦x, y i due caratteri che hanno frequenza più bassa

✦Σ' = Σ - { x, y } { ∪ z }

✦f[z] = f[x] + f[y]

✦O un albero che rappresenta un codice a prefisso ottimo per Σ'

✦Allora:

✦L'albero T (ottenuto da O sostituendo il nodo foglia z con un nodo interno con due figli x, y) rappresenta un codice a prefisso ottimo per Σ

Page 60: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

60

© Alberto Montresor

Sottostruttura ottima

✦Esprimiamo la relazione fra il costo di T e O

✦Per ogni c Σ - { ∈ x, y } → f[c]·dT(c) = f[c]·dO(c)Quindi tutte queste componenti sono uguali

✦dT(x) = dT(y) = dO(z)+1✦da cui concludiamo

✦f[x]·dT(x) + f[y]·dT(y) =(f[x] + f[y])( dO(z)+1 ) =f[z]·dO(z) + f[x] + f[y]

✦da cui concludiamo✦C(f, T) = C(f, O) + f[x] + f[y]C(f, O) = C(f, T) - f[x] - f[y]

Page 61: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

61

© Alberto Montresor

Sottostruttura ottimaSottostruttura ottima

✦Per assurdo: supponiamo T non sia ottimo

✦Allora esiste un albero T' tale che C(f, T') < C(f, T)

✦Senza perdere in generalità, sappiamo che T' ha x e y come foglie sorelle

✦Sia T'' l'albero ottenuto da T' sostituendo il padre di x, y con un nodo z tale che f[z] = f[x] + f[y]

✦Allora

✦C(f, T'') = C(f, T') – f[x] – f[y] < C(f, T) – f[x] – f[y]

= C(f, O)

✦Il che è assurdo, visto che O è ottimo

Page 62: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

62

© Alberto Montresor

Algoritmo di scheduling - Programmi in ritardo

✦Programmi in ritardo

✦Dati n programmi p1, ..., pn, tali che ciascun pi richiede ti unità di tempo di esecuzione e deve essere eseguito entro una certa scadenza di, trovare un ordine S in cui eseguirli tutti in modo da minimizzare il numero di programmi per i quali la scadenza non è rispettata

✦Algoritmo di Moore (1968)

✦Sequenza iniziale S - programmi ordinati per scadenze crescenti

✦Si cerca il primo programma p in ritardo

✦Si elimina il più lungo programma p’ nella sottosequenza che precede p, ottenendo la sequenza S’

✦Si itera il procedimento sulla sottosequenza S’, fino ad ottenere una sottosequenza S* senza programmi in ritardo

✦Si eseguono quindi i programmi in S*, seguiti dai programmi in ritardo

Page 63: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

63

© Alberto Montresor

Algoritmo di scheduling - Programmi in ritardo

✦Dimostrazione

✦Basata sul principio di sostituzione:✦Trasformiamo una qualunque soluzione ottima nella sequenza generata dall’algoritmo greedy, senza inficiarne l’ottimalità

Page 64: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

64

© Alberto Montresor

Albero di copertura di peso minimo

✦Un problema di notevole importanza:

✦determinare come interconnettere diversi elementi fra loro minimizzando certi vincoli sulle connessioni

✦Esempio classico:

✦progettazione dei circuiti elettronici dove si vuole minimizzare la quantità di filo elettrico per collegare fra loro i diversi componenti

✦Questo problema prende il nome di:

✦albero di copertura (di peso) minimo

✦albero di connessione (di peso) minimo

✦minimum spanning tree

Page 65: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

65

© Alberto Montresor

Definizione del problema

✦Input:

✦G=(V,E) un grafo non orientato e connesso

✦w: V×V → R una funzione di peso (costo di connessione)✦se [u,v] ∈ E, allora w(u,v) è il peso dell'arco [u,v]✦se [u,v] ∉ E, allora w(u,v) = ∞

✦Poiché G non è orientato, w(u,v) = w(v,u)

Page 66: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

66

© Alberto Montresor

Definizione del problema

✦Albero di copertura (spanning tree)

✦Dato un grafo G=(V,E) non orientato e connesso, un albero di copertura di G è un sottografo T=(V, ET) tale che

✦T è un albero✦ET ⊆ E✦T contiene tutti i vertici di G

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

Page 67: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

67

© Alberto Montresor

Definizione del problemaDefinizione del problema

✦Output: albero di copertura minimo (minimum spanning tree)

✦L'albero di copertura il cui peso totale

sia minimo

✦Nota: L’albero di copertura di peso minimo non è unico

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

Page 68: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

68

© Alberto Montresor

Differenze con cammini minimi

✦Calcolare

✦un albero dei cammini minimi da singola sorgente a

✦un albero di copertura minima

✦coincidono?

a b

c d

2

2 1

1

Page 69: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

69

© Alberto Montresor

Algoritmo generico

✦Vediamo

✦Un algoritmo di tipo “goloso” generico

✦Due “istanze” di questo algoritmo: Kruskal e Prim

✦L'idea è di accrescere un sottoinsieme A di archi in modo tale che venga rispettata la seguente condizione:

✦A è un sottoinsieme di qualche albero di connessione minimo

✦Un arco [u,v] è detto sicuro per A se A ∪ {[u,v]} è ancora un sottoinsieme di qualche albero di connessione minimo.

Page 70: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

70

© Alberto Montresor

Algoritmo genericoAlgoritmo generico

Page 71: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

71

© Alberto Montresor

Definizioni

✦Per caratterizzare gli archi sicuri dobbiamo introdurre alcune definizioni:

✦Un taglio (S,V-S) di un grafo non orientato G=(V,E) è una partizione di V in due sottoinsiemi disgiunti

✦Un arco [u,v] attraversa il taglio se u ∈S e v ∈V-S

✦Un taglio rispetta un insieme di archi A se nessun arco di A attraversa il taglio

✦Un arco che attraversa un taglio è leggero nel taglio se il suo peso è minimo fra i pesi degli archi che attraversano un taglio

Page 72: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

72

© Alberto Montresor

EsempioEsempio

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

Insieme A: archi in grigioIl taglio rispetta A

Taglio

Arco leggero che attraversa il taglio

10

V-S

V

Page 73: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

73

© Alberto Montresor

Archi sicuri

✦La regola per riconoscere gli archi sicuri è data dal seguente

✦Teorema:

✦Sia G=(V,E) un grafo non orientato e connesso

✦Sia w una funzione peso a valori reali definita su E

✦Sia A ⊆ E contenuto in un qualche albero di copertura minimo per G

✦Sia (S,V-S) un qualunque taglio che rispetta A

✦Sia [u,v] un arco leggero che attraversa il taglio.

✦Allora

✦l’arco [u,v] è sicuro per A

Page 74: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

74

© Alberto Montresor

Esempio: arco non sicuro perché il taglio non rispetta AEsempio: arco non sicuro perché il taglio non rispetta A

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

Arco sicuro

Arco non sicuro

Page 75: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

75

© Alberto Montresor

Esempio: arco non sicuro perché non leggeroEsempio: arco non sicuro perché non leggero

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

Arco sicuro

Arco non sicuro

Page 76: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

76

© Alberto Montresor

Archi sicuri

✦Corollario:

✦Sia G=(V,E) un grafo non orientato e connesso

✦Sia w una funzione peso a valori reali definita su E

✦Sia A ⊆ E contenuto in un qualche albero di copertura minimo per G

✦Sia C una componente connessa (un albero) nella foresta GA=(V,A)

✦Sia [u,v] un arco leggero che connette C a qualche altra componente in GA

✦Allora

✦l’arco [u,v] è sicuro per A

Page 77: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

77

© Alberto Montresor

Algoritmo di Kruskal

✦Idea

✦Ingrandire sottoinsiemi disgiunti di un albero di copertura minimo connettendoli fra di loro fino ad avere l’albero complessivo

✦Si individua un arco sicuro scegliendo un arco [u,v] di peso minimo tra tutti gli archi che connettono due distinti alberi (componenti connesse) della foresta

✦L’algoritmo è greedy perché ad ogni passo si aggiunge alla foresta un arco con il peso minore

✦Implementazione

✦Utilizziamo una struttura dati Merge-Find

Page 78: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

78

© Alberto Montresor

Algoritmo di KruskalAlgoritmo di Kruskal

Page 79: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

79

© Alberto Montresor

VisualizzazioneVisualizzazione

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

Page 80: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

80

© Alberto Montresor

VisualizzazioneVisualizzazione

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

Page 81: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

81

© Alberto Montresor

VisualizzazioneVisualizzazione

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

Page 82: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

82

© Alberto Montresor

Analisi

✦Il tempo di esecuzione per l’algoritmo di Kruskal dipende dalla realizzazione della struttura dati per insiemi disgiunti

✦Utilizziamo la versione con euristica sul rango + compressione

✦L’inizializzazione richiede O(n)

✦L'ordinamento richiede O(m log m) = O(m log n2) = O(m log n)

✦Vengono eseguite O(m) operazioni sulla foresta di insiemi disgiunti, il che richiede un tempo O(m)

✦Totale:

✦O(n+m log n + m) = O(m log n)

Page 83: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

83

© Alberto Montresor

Algoritmo di Prim

✦L’algoritmo di Prim procede mantenendo in A un singolo albero

✦L’albero parte da un vertice arbitrario r (la radice) e cresce fino a quando non ricopre tutti i vertici

✦Ad ogni passo viene aggiunto un arco leggero che collega un vertice in VA con un vertice in V-VA

✦dove VA è l'insieme di nodi raggiunti da archi in A

✦Correttezza

✦(VA,V-VA) è un taglio che rispetta A (per definizione)

✦Per il corollario, gli archi leggeri che attraversano il taglio sono sicuri

Page 84: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

84

© Alberto Montresor

Implementazione

✦Una struttura dati per i nodi non ancora nell'albero

✦Durante l'esecuzione, i vertici non ancora nell'albero si trovano in una coda con priorità Q ordinata in base alla seguente definizione di priorità:

✦“La priorità del nodo v è il peso minimo di un arco che collega v ad un vertice nell'albero, o +∞ se tale arco non esiste”

✦Come mantenere l'albero

✦Ogni nodo v mantiene un puntatore al padre p[v]

✦A è mantenuto implicitamente: A = { [v, v.p] | v ∈V-Q-{r} }

✦Terminazione: Quando la coda Q è vuota

✦Tutti i nodi tranne la radice conoscono il proprio padre

Page 85: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

85

© Alberto Montresor

Algoritmo di PrimAlgoritmo di Prim

Page 86: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

86

© Alberto Montresor

Algoritmo di Prim: EsempioAlgoritmo di Prim: Esempio

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

8

4

8

8

8

7

2

4

7

67 4

Page 87: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

87

© Alberto Montresor

Algoritmo di Prim: EsempioAlgoritmo di Prim: Esempio

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

106

27

10

7

7

1

7

10

10

9

Page 88: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

88

© Alberto Montresor

Algoritmo di Prim: EsempioAlgoritmo di Prim: Esempio

b c d

a

h g f

ei

4

8

8

11

7

4

92

14

2

6

1

7

10

Page 89: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

89

© Alberto Montresor

Algoritmo di Prim: Analisi

✦L’efficienza dell’algoritmo di Prim dipende dalla coda Q

✦Se Q viene realizzata tramite uno heap binario:

✦Inizializzazione: O(n log n)

✦Il ciclo principale viene eseguito n volte ed ogni operazione extractMin() è O(log n)

✦Il ciclo interno viene eseguito O(m) volte

✦L'operazione decreaseKey() sullo heap che costa O(log n)

✦Tempo totale:

✦O(n+n log n + m log n)=O(m log n)

✦asintoticamente uguale a quello di Kruskal

✦Cosa succede se la coda con priorità è implementata tramite vettore non ordinato?

Page 90: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

90

© Alberto Montresor

Esercizi

✦Vero o falso

✦L’arco con peso minimo è sicuro

✦L’arco con il secondo peso minimo è sicuro

✦L’arco con il terzo peso minimo è sicuro

✦Albero di copertura minima in un piano

✦Dati n punti nel piano

✦La distanza euclidea fra due punti è il peso di una connessione fra di essi

✦Trovare un insieme di connessioni di peso minimo

Page 91: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

91

© Alberto Montresor

Conclusioni

✦Prospettiva storica

✦Primo algoritmo: Boruvka 1926

✦Kruskal 1956

✦Prim 1957 (ma anche Jarnik nel 1930)

✦Utilizzando gli heap di Fibonacci

✦Prim viene eseguito in tempo O(m + n log n)

✦Sviluppi recenti

✦Karger, Klein, Tarjan (algoritmo randomizzato): O(n+m)

✦Fredman, Willard (algoritmo non basato su confronti): O(n+m)

Page 92: 1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 14 - Greedy Alberto Montresor Università di Trento This work is licensed under the Creative Commons

92

© Alberto Montresor

Algoritmi greedy

✦Vantaggi

✦Semplici da programmare

✦Molto efficienti

✦Quando è possibile dimostrare la proprietà di scelta ingorda,danno la soluzione ottima

✦La soluzione sub-ottima può essere accettabile

✦Svantaggi

✦Non sempre applicabili se si vuole la soluzione ottima