Algoritmi e Strutture Dati...

43
Algoritmi e Strutture Dati Analisi ammortizzata Alberto Montresor Università di Trento 2018/12/26 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Transcript of Algoritmi e Strutture Dati...

Page 1: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Algoritmi e Strutture Dati

Analisi ammortizzata

Alberto Montresor

Università di Trento

2018/12/26

This work is licensed under a Creative CommonsAttribution-ShareAlike 4.0 International License.

references

Page 2: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Sommario

1 Introduzione2 Contatore binario

AggregazioneAmmortamentoPotenziale

3 Vettori dinamiciInserimentoCancellazione

4 Conclusioni

Page 3: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Introduzione

Introduzione

Analisi ammortizzata

Una tecnica di analisi di complessità che valuta il tempo richiestoper eseguire, nel caso pessimo, una sequenza di operazioni su unastruttura dati.

Esistono operazioni più o meno costose.Se le operazioni più costose sono poco frequenti, allora il lorocosto può essere ammortizzato dalle operazioni meno costose

Importante differenzaAnalisi caso medio: Probabilistica, su singola operazioneAnalisi ammortizzata: Deterministica, su operazioni

multiple, caso pessimo

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 1 / 37

Page 4: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Introduzione

Metodi per l’analisi ammortizzata

Metodo dell’aggregazione

Si calcola la complessità T (n) per eseguire n operazioni in sequenzanel caso pessimo

Tecnica derivata dalla matematica

Metodo degli accantonamenti

Alle operazioni vengono assegnati costi ammortizzati che possonoessere maggiori/minori del loro costo effettivo

Tecnica derivata dall’economia

Metodo del potenziale

Lo stato del sistema viene descritto con una funzione di potenziale

Tecnica derivata dalla fisica

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 2 / 37

Page 5: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario

Esempio – Contatore binario

Contatore binario

Contatore binario di k bit con un vettore A di booleani 0/1Bit meno significativo in A[0], bit più significativo in A[k − 1]

Valore del contatore: x =

k−1∑i=0

A[i]2i

Operazione increment() che incrementa il contatore di 1

increment(int[ ] A, int k)int i = 0while i < k and A[i] == 1 do

A[i] = 0i = i+ 1

if i < k thenA[i] = 1

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 3 / 37

Page 6: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario

Esempiox A[7] A[6] A[5] A[4] A[3] A[2] A[1] A[0]0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 12 0 0 0 0 0 0 1 03 0 0 0 0 0 0 1 14 0 0 0 0 0 1 0 05 0 0 0 0 0 1 0 16 0 0 0 0 0 1 1 07 0 0 0 0 0 1 1 18 0 0 0 0 1 0 0 09 0 0 0 0 1 0 0 110 0 0 0 0 1 0 1 011 0 0 0 0 1 0 1 112 0 0 0 0 1 1 0 013 0 0 0 0 1 1 0 114 0 0 0 0 1 1 1 015 0 0 0 0 1 1 1 116 0 0 0 1 0 0 0 0Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 4 / 37

Page 7: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario Aggregazione

Analisi ammortizzata – Metodo dell’aggregazione

Metodo dell’aggregazione

Si calcola la complessità T (n) per eseguire n operazioni insequenza nel caso pessimo

Sequenza: si considera l’evoluzione della struttura dati data unasequenza di operazioni

Caso pessimo: si considera la peggior sequenza di operazioni

Aggregazione: sommare assieme tutte le complessità individuali

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 5 / 37

Page 8: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario Aggregazione

Analisi ammortizzata – Metodo dell’aggregazione

Analisi “grossolana”

Una chiamata increment() richiede tempo O(k) nel casopessimoEssendoci una sola operazione, esiste un’unica sequenzapossibileLimite superiore T (n) = O(nk) per una sequenza di nincrementi

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 6 / 37

Page 9: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario Aggregazione

Quanto costano n operazioni di incremento?

Sono necessarik = dlog ne bit perrappresentare n

Costo di 1 operazione:T (n)/n = O(k)

Costo di n operazioni:T (n) = O(nk)

4

6

8

10

12

14

16

18

220

222

224

226

228

230

232

234

Te

mp

o (

ns)

n

T(n)/n

k ∈ {20, . . . , 35}

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 7 / 37

Page 10: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario Aggregazione

Quanto costano n operazioni di incremento?

Considerazioni per un’analisi più stretta

Possiamo osservare che il tempo necessario ad eseguire l’interasequenza è proporzionale al numero di bit che vengonomodificatiQuanti bit vengono modificati?

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 8 / 37

Page 11: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario Aggregazione

Esempiox A[7] A[6] A[5] A[4] A[3] A[2] A[1] A[0] #bit0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 1 12 0 0 0 0 0 0 1 0 23 0 0 0 0 0 0 1 1 14 0 0 0 0 0 1 0 0 35 0 0 0 0 0 1 0 1 16 0 0 0 0 0 1 1 0 27 0 0 0 0 0 1 1 1 18 0 0 0 0 1 0 0 0 49 0 0 0 0 1 0 0 1 110 0 0 0 0 1 0 1 0 211 0 0 0 0 1 0 1 1 112 0 0 0 0 1 1 0 0 313 0 0 0 0 1 1 0 1 114 0 0 0 0 1 1 1 0 215 0 0 0 0 1 1 1 1 116 0 0 0 1 0 0 0 0 5Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 9 / 37

Page 12: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario Aggregazione

Esempiox A[7] A[6] A[5] A[4] A[3] A[2] A[1] A[0] #bit0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 1 12 0 0 0 0 0 0 1 0 23 0 0 0 0 0 0 1 1 14 0 0 0 0 0 1 0 0 35 0 0 0 0 0 1 0 1 16 0 0 0 0 0 1 1 0 27 0 0 0 0 0 1 1 1 18 0 0 0 0 1 0 0 0 49 0 0 0 0 1 0 0 1 110 0 0 0 0 1 0 1 0 211 0 0 0 0 1 0 1 1 112 0 0 0 0 1 1 0 0 313 0 0 0 0 1 1 0 1 114 0 0 0 0 1 1 1 0 215 0 0 0 0 1 1 1 1 116 0 0 0 1 0 0 0 0 5

#bit 0 0 0 1 2 4 8 16Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 10 / 37

Page 13: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario Aggregazione

Contatore binario – Metodo dell’aggregazione

Dalla simulazione si vede che:A[0] viene modificato ogni 1 incrementoA[1] viene modificato ogni 2 incrementiA[2] viene modificato ogni 4 incrementi. . .A[i] viene modificato ogni 2i incrementi

Analisi ammortizzata

Costo totale: T (n) =

k−1∑i=0

⌊ n2i

⌋≤ n

k−1∑i=0

1

2i≤ n

+∞∑i=0

(1

2

)i

= 2n

Costo ammortizzato: T (n)/n = 2n/n = 2 = O(1)

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 11 / 37

Page 14: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario Ammortamento

Analisi ammortizzata – Metodo degli accantonamenti

Si assegna un costo ammortizzato potenzialmente distinto adognuna delle operazioni possibiliIl costo ammortizzato può essere diverso dal costo effettivo

Le operazioni meno costose vengono caricate di un costo aggiuntivodetto credito

costo ammortizzato = costo effettivo + credito prodotto

I crediti accumulati sono usati per pagare le operazioni più costose

costo ammortizzato = costo effettivo − credito consumato

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 12 / 37

Page 15: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario Ammortamento

Analisi ammortizzata – Metodo degli accantonamenti

Obiettivi

dimostrare che la somma dei costi ammortizzati ai è un limitesuperiore ai costi effettivi ci:

n∑i=1

ci ≤n∑

i=1

ai

dimostrare che il valore così ottenuto è “poco costoso”

Alcuni punti da ricordare:La dimostrazione deve valere per tutte le sequenze (caso pessimo)Il credito dopo l’operazione t-esima è espresso dalla seguenteformula ed è sempre positivo

t∑i=1

ai −t∑

i=1

ci ≥ 0

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 13 / 37

Page 16: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario Ammortamento

Contatore binario – Metodo degli accantonamenti

Costo effettivo dell’operazione increment(): dDove d è il numero di bit che cambiano valore

Costo ammortizzato dell’operazione increment(): 2

1 per cambio di un bit da 0 a 1 (costo effettivo)1 per il futuro cambio dello stesso bit da 1 a 0

Ne consegue che:In ogni istante, il credito è pari al numero di bit 1 presentiCosto totale: O(n)Costo ammortizzato: O(1)

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 14 / 37

Page 17: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario Potenziale

Analisi amortizzata – Metodo del potenziale

Funzione di potenziale

Si associa alla struttura dati D una funzione di potenziale Φ(D)

le operazioni meno costose devono incrementare Φ(D)

le operazioni più costose devono decrementare Φ(D)

Costo ammortizzato

Il costo ammortizzato è pari al costo effettivo + variazione di po-tenziale.

ai = ci + Φ(Di)− Φ(Di−1)

dove Di è il potenziale associato alla i-esima operazione.

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 15 / 37

Page 18: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario Potenziale

Analisi amortizzata – Metodo del potenziale

Costo ammortizzato, sequenza di n operazioni

A =

n∑i=1

ai

=

n∑i=1

(ci + Φ(Di)− Φ(Di−1))

=n∑

i=1

ci +

n∑i=1

(Φ(Di)− Φ(Di−1))

= C + Φ(D1)− Φ(D0) + Φ(D2)− Φ(D1) + . . .+ Φ(Dn)− Φ(Dn−1)

= C + Φ(Dn)− Φ(D0)

Se la variazione di potenziale Φ(Dn)− Φ(D0) è non negativa,il costo ammortizzato A è un limite superiore al costo reale

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 16 / 37

Page 19: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Contatore binario Potenziale

Contatore binario – Metodo del potenziale

Scegliamo come funzione potenziale Φ(D) il numero bit 1 presentinel contatore

Operazione increment():Costo effettivo: 1 + tVariazione di potenziale: 1− tCosto ammortizzato: 1 + t+ 1− t = 2t è il numero di bit 1 incontrati a partire dal meno significativo,prima di incontrare un bit 0

All’inizio, zero bit accesi ⇒ Φ(D0) = 0

Alla fine, Φ(Dn) ≥ 0 ⇒ la differenza di potenziale è non negativa

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 17 / 37

Page 20: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Vettori dinamici – Espansione

Sequenze implementate tramite vettori dinamici

Si alloca un vettore di una certa dimensione detta capacitàL’inserimento di un elemento “in mezzo” ha costo O(n)

Inserire un elemento “in fondo” alla sequenza (append) hacosto O(1)

Insert

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 18 / 37

Page 21: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Vettori dinamici – Espansione

Sequenze implementate tramite vettori dinamici

Si alloca un vettore di una certa dimensione detta capacitàL’inserimento di un elemento “in mezzo” ha costo O(n)

Inserire un elemento “in fondo” alla sequenza (append) hacosto O(1)

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 18 / 37

Page 22: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Vettori dinamici – Espansione

Sequenze implementate tramite vettori dinamici

Si alloca un vettore di una certa dimensione detta capacitàL’inserimento di un elemento “in mezzo” ha costo O(n)

Inserire un elemento “in fondo” alla sequenza (append) hacosto O(1)

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 18 / 37

Page 23: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Vettori dinamici – Espansione

Sequenze implementate tramite vettori dinamici

Si alloca un vettore di una certa dimensione detta capacitàL’inserimento di un elemento “in mezzo” ha costo O(n)

Inserire un elemento “in fondo” alla sequenza (append) hacosto O(1)

Append

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 18 / 37

Page 24: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Vettori dinamici – Espansione

Sequenze implementate tramite vettori dinamici

Si alloca un vettore di una certa dimensione detta capacitàL’inserimento di un elemento “in mezzo” ha costo O(n)

Inserire un elemento “in fondo” alla sequenza (append) hacosto O(1)

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 18 / 37

Page 25: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Vettori dinamici – Espansione

Problema

Non è noto a priori quanti elementi entreranno nella sequenzaLa capacità selezionata può rivelarsi insufficiente.

Soluzione

Si alloca un vettore di capacità maggiore, si ricopia ilcontenuto del vecchio vettore nel nuovo e si rilascia il vecchiovettoreEsempi: java.util.Vector (1.0), java.util.ArrayList(1.2)

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 19 / 37

Page 26: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Vettori dinamici in Java

private Object[] buffer = new Object[INITSIZE];

// Raddoppiamentoprivate void doubleStorage() {

Object[] newb = new Object[2*buffer.length];System.arraycopy(buffer,0, newb,0, buffer.length);buffer = newb;

}

// Incremento fissoprivate Object[] buffer = new Object[INITSIZE];private void incrementStorage() {

Object[] newb = new Object[buffer.length+INCREMENT];System.arraycopy(buffer,0, newb,0, buffer.length);buffer = newb;

}

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 20 / 37

Page 27: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Vettori dinamici in Java – Quale approccio?

private Object[] buffer = new Object[INITSIZE];

// Raddoppiamento – Utilizzato in ArrayList (1.2)private void doubleStorage() {

Object[] newb = new Object[2*buffer.length];System.arraycopy(buffer,0, newb,0, buffer.length);buffer = newb;

}

// Incremento fisso – Utilizzato in Vector (1.0)private Object[] buffer = new Object[INITSIZE];private void incrementStorage() {

Object[] newb = new Object[buffer.length+INCREMENT];System.arraycopy(buffer,0, newb,0, buffer.length);buffer = newb;

}

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 21 / 37

Page 28: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Vettori dinamici – Espansione

Domanda

Qual è il migliore fra i due?

Dalla documentazione Java: ArrayList.add():

As elements are added to an ArrayList, its capacity growsautomatically. The details of the growth policy are notspecified beyond the fact that adding an element hasconstant amortized time cost.

Domanda

Cosa significa?

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 22 / 37

Page 29: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Analisi ammortizzata, raddoppiamento del vettore

Costo effettivo di un’operazione add():

ci =

{i ∃k ∈ Z+

0 : i = 2k + 1

1 altrimenti

Assunzioni:Dimensione iniziale: 1Costo di scrittura di un elemento: 1

n costo1 12 1 + 20 = 23 1 + 21 = 34 15 1 + 22 = 56 17 18 19 1 + 23 = 9

10 111 112 113 114 115 116 117 1 + 24 = 17

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 23 / 37

Page 30: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Analisi ammortizzata, raddoppiamento del vettore

Costo effettivo di n operazioni add():

T (n) =

n∑i=1

ci

= n+

blognc∑j=0

2j

= n+ 2blognc+1 − 1

≤ n+ 2logn+1 − 1

= n+ 2n− 1 = O(n)

Costo ammortizzato diun’operazione add():

T (n)/n =O(n)

n= O(1)

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 24 / 37

Page 31: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Analisi ammortizzata, incremento del vettore

Costo effettivo di un’operazione add():

ci =

{i (i mod d) = 1

1 altrimenti

Assunzioni:Incremento: dDimensione iniziale: dCosto di scrittura di un elemento: 1

Nell’esempio:d = 4

n costo1 12 13 14 15 1 + d = 56 17 18 19 1 + 2d = 9

10 111 112 113 1 + 3d = 1314 115 116 117 1 + 4d = 17

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 25 / 37

Page 32: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Analisi ammortizzata, incremento del vettore

Costo effettivo di n operazioni add():

T (n) =

n∑i=1

ci

= n+

bn/dc∑j=1

d · j

= n+ d

bn/dc∑j=1

j

= n+ d(bn/dc+ 1)bn/dc

2

≤ n+(n/d+ 1)n

2= O(n2)

Costo ammortizzato diun’operazione add():

T (n)/n =O(n2)

n= O(n)

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 26 / 37

Page 33: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Reality check

Linguaggio Struttura dati Fattore espansioneGNU C++ std::vector 2.0

Microsoft VC++ 2003 vector 1.5C# List 2.0

Python list 1.125Oracle Java ArrayList 2.0

OpenSDK Java ArrayList 1.5

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 27 / 37

Page 34: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Non ancora convinti? Allocazione memoria

Domande

Quanto memoria occupa un intero memorizzato in un vettoredinamico di interi, nel caso pessimo/ottimo?Quanto memoria occupa un intero memorizzato in unelemento di una lista di interi, nel caso pessimo/ottimo?

Alcuni dati interessanti (e inquietanti) relativi a Java

un Object vuoto richiede 16 byte in un’architettura a 64 bitl’allocazione di memoria avviene per multipli di 8 byteun oggetto contenente un intero e due reference (listabidirezionale) richiede 32-40 byte (Java compressed references)

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 28 / 37

Page 35: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Non ancora convinti? String vs StringBuffer

public static void print(int dim){

StringBuffer buffer = new StringBuffer();for (int i=0; i < dim; i++) {

buffer.append(’x’);}

String string = new String();for (int i=0; i < dim; i++) {

string = string + ’x’;}

}

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 29 / 37

Page 36: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Inserimento

Non soddisfatti ancora? String vs StringBuffer

dim StringBuffer (ms) String (ms)1024 0 32048 1 74096 1 138192 1 2216384 3 7132768 4 28565536 3 1130131072 4 4847262144 6 20853524288 11 849821048576 24 400653

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 30 / 37

Page 37: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Cancellazione

Vettori dinamici – Cancellazione

Domande

Quanto costa togliere un elemento da un vettore?Quanto costa togliere un elemento da un vettore non ordinato?

Contrazione

Per ridurre lo spreco di memoria, è opportuno contrarre il vettorequando il fattore di carico α = dim/capacità diventa troppo piccolo

dim: numero di elementi attualmente presentiContrazione → allocazione, copia, deallocazione

Domanda

Quale soglia per il fattore di carico?

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 31 / 37

Page 38: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Cancellazione

Vettori dinamici – Cancellazione

Strategia naif

Una strategia che sembra ovvia è dimezzare la memoria quando ilfattore di carico α diventa 1

2

Dimostrare che questa strategia può portare ad un costo ammortiz-zato lineare

Considerate la seguente sequenza di Inserimenti / Rimozioni in unvettore di capacità 8:

Ops: I I I I I R I R I R I R IDim: 1 2 3 4 5 4 5 4 5 4 5 4 5Cap: 8 8 8 8 8 4 8 4 8 4 8 4 8

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 32 / 37

Page 39: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Cancellazione

Vettori dinamici – Cancellazione

Qual è il problema?Non abbiamo un numero di inserimenti/rimozioni sufficienti perripagare le espansioni/contrazioni.

Dobbiamo lasciar decrescere il sistema ad un fattore inferiore a α = 14

Dopo un’espansione, il fattore di carico diventa 12

Dopo una contrazione, il fattore di carico diventa 12

Analisi ammortizzata: usiamo una funzione di potenziale che:Vale 0 all’inizio e subito dopo una espansione o contrazioneCresce fino a raggiungere il numero di elementi presenti nellatavola quando α aumenta fino ad 1 o diminuisce fino ad 1/4

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 33 / 37

Page 40: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Cancellazione

Vettori dinamici: contrazione

Funzione di potenziale

Φ =

{2 · dim− capacità α ≥ 1

2

capacità/2− dim α ≤ 12

Alcuni casi esplicativi:α = 1

2 (dopo espansione/contrazione) ⇒ Φ = 0

α = 1 (prima di espansione) ⇒ dim = capacità ⇒ Φ = dimα = 1

4 (prima di contrazione) ⇒ capacità = 4 · dim⇒ Φ = dim

In altre parole: immediatamente prima di espansioni e contrazioni ilpotenziale è sufficiente per “pagare” il loro costo

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 34 / 37

Page 41: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Cancellazione

Vettori dinamici: contrazione

© Alberto Montresor 16

421

8

16

32

1 2 4 8 16 32 i

size capacity

48

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 35 / 37

Page 42: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Vettori dinamici Cancellazione

Vettori dinamici: contrazione

Se α ≥ 12 il costo ammortizzato di un inserimento senza espansione è:

ai = ci + Φi − Φi−1

= 1 + (2 · dimi − capacitài)− (2 · dimi−1 − capacitài−1)

= 1 + 2 · (dimi−1 + 1)− capacitài−1 − 2 · dimi−1 + capacitài−1

= 3

Se α = 1 il costo ammortizzato di un inserimento con espansione è:

ai = ci + Φi − Φi−1

= 1 + dimi−1 + (2 · dimi − capacitài)− (2 · dimi−1 − capacitài−1)

= 1 + dimi−1 + 2 · (dimi−1 + 1)− 2 · dimi−1 − 2 · dimi−1 + dimi−1

= 3

[ Esercizio: Altri casi per valori differenti di α e per contrazione ]

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 36 / 37

Page 43: Algoritmi e Strutture Dati Analisiammortizzatadisi.unitn.it/~montreso/asd/handouts/02-analisi-ammortizzata.pdf · costo ammortizzato = costo e ettivo + credito prodotto Icreditiaccumulatisonousatiperpagareleoperazionipiùcostose

Conclusioni

Conclusioni

Esempi di applicazione dell’analisi ammortizzata

Espansione / contrazione di tabelle hash

Insiemi disgiunti con euristica sul rango e compressione deicammini

Heap di Fibonacci

. . .

Alberto Montresor (UniTN) ASD - Analisi ammortizzata 2018/12/26 37 / 37