Page 1
1© Alberto Montresor
Algoritmi e Strutture DatiCapitolo 2 - Analisi di algoritmi
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
2© Alberto Montresor
Valutare la complessità in tempo
✦Complessità in tempo: cosa serve?✦Per stimare il tempo impiegato da un programma
✦Per stimare il più grande input gestibile in tempi ragionevoli
✦Per confrontare l'efficienza di algoritmi diversi
✦Per ottimizzare le parti più importanti
✦“Complessità”: “Dimensione” → “Tempo” ✦Dobbiamo definire “dimensione” e “tempo”!
Page 3
3© Alberto Montresor
Dimensione dell'input
✦Criterio di costo logaritmico: ✦La taglia dell'input è il numero di bit necessari per rappresentarlo
✦Esempio: moltiplicazione di numeri binari lunghi n bit
✦Criterio di costo uniforme✦La taglia dell'input è il numero di elementi che lo costituiscono
✦Esempio: ricerca minimo in un array di n elementi
✦In molti casi: ✦Possiamo assumere che gli “elementi” siano rappresentati da un numero costante di bit
✦Le due misure coincidono a meno di una costante moltiplicativa
Page 4
4© Alberto Montresor
Definizione di tempo
✦Tempo = “Wall-clock” time: ✦Il tempo effettivamente impiegato per eseguire un algoritmo
✦Dipende da troppi parametri:✦bravura del programmatore
✦linguaggio di programmazione utilizzato
✦codice generato dal compilatore
✦processore, memoria (cache, primaria, secondaria)
✦sistema operativo, processi attualmente in esecuzione
✦Dobbiamo considerare un modello astratto
Page 5
5© Alberto Montresor
Definizione di tempo
✦Tempo = “# operazioni elementari”✦Quali operazioni possono essere considerate elementari?
✦Esempio: min(A, n)
✦Modello di calcolo: rappresentazione astratta di un calcolatore✦Astrazione: deve semplificare dettagli, altrimenti è inutile
✦Realismo: deve riflettere la situazione reale
✦“Potenza” matematica:deve permettere di trarre conclusioni “formali” sul costo
Page 6
6© Alberto Montresor
Da “Wikipedia”Da “Wikipedia”
Page 7
7© Alberto Montresor
Macchina di TuringMacchina di Turing
…a1 a2D
Meccanismo di controllo
(Programma)
Nastro
Cella
Testina
La macchina:legge il simbolo sotto la testinamodifica il proprio stato (finito) internoscrive un nuovo simbolo nella cellamuove la testina a destra o a sinistraMarcatore della prima
cella
✦Fondamentale nello studio della calcolabilità
✦Non adatto per i nostri scopi✦Livello troppo basso
✦Non sufficientemente realistico
Page 8
8© Alberto Montresor
Modello RAMModello RAM
✦Random Access Machine (RAM)✦Memoria:
✦Quantità infinita di celle di dimensione finita✦Accesso in tempo costante (indipendente dalla posizione)
✦ Processore (singolo)✦Set di istruzioni elementari simile a quelli reali:
✦somme, addizioni, moltiplicazioni, operazioni logiche, etc. ✦istruzioni di controllo (salti, salti condizionati)
✦Costo delle istruzioni elementari✦Uniforme, ininfluente ai fini della valutazione (come vedremo)
Page 9
9© Alberto Montresor
Tempo di calcolo di min()
✦Ogni istruzione richiede un tempo costante per essere eseguita
✦Costante diversa da istruzione a istruzione
✦Ogni istruzione viene eseguita un certo # di volte, dipendente da n
Page 10
10
© Alberto Montresor
Tempo di calcolo di binarySearch()
✦Il vettore viene suddiviso in due parti
Page 11
11
© Alberto Montresor
Tempo di calcolo di binarySearch()
✦Assunzioni✦Per semplicità, assumiamo n potenza di 2: n =2k
✦L’elemento cercato non è presente (caso pessimo)
✦Ad ogni suddivisione, scegliamo sempre la parte DX di dimensione n/2(caso pessimo)
✦Due casi
✦Equazione di ricorrenza
Page 12
12
© Alberto Montresor
Tempo di calcolo di binarySearch()
✦Soluzione ricorrenza per sostituzione✦Ricordate che n = 2k ⇒ k = log n
Page 13
13
© Alberto Montresor
Analisi di algoritmi
✦Analisi del caso pessimo ✦La più importante
✦Il tempo di esecuzione nel caso peggiore è un limite superiore al tempo di esecuzione per qualsiasi input
✦Per alcuni algoritmi, il caso peggiore si verifica molto spesso✦Es.: ricerca di dati non presenti in un database
✦Il caso medio è spesso cattivo quanto quello peggiore✦Vedi insertionSort()
✦Analisi del caso medio✦Difficile in alcuni casi: cosa si intende per “medio”?
✦Distribuzione uniforme
✦Analisi del caso ottimo✦Può avere senso se l’input ha una distribuzione particolare
Page 14
14
© Alberto Montresor
Limiti asintotici superiori e inferiori
Page 15
15
© Alberto Montresor
Algoritmi: primi esempiAlgoritmi: primi esempi
✦Nei prossimi lucidi, vedremo alcuni semplici algoritmi
✦Somme e moltiplicazioni (!)
✦Ordinamento
✦Vogliamo riflettere su:✦In alcuni casi, si può migliorare quanto si ritiene “normale”
✦In altri casi, è impossibile fare di meglio
✦Qual è il rapporto fra un problema computazionale e l'algoritmo?
2 X 2 = 5
Page 16
16
© Alberto Montresor
Moltiplicare numeri complessi
✦Ricordate come moltiplicare due numeri complessi?✦(a+bi)(c+di) = [ac – bd] + [ad + bc]i
✦Input: a, b, c, d Output: ac-bd, ad+bc
✦Modello di calcolo:✦Costo moltiplicazione: 1, costo addizione/sottrazione: 0.01
✦Domande ✦Quanto costa l'algoritmo “banale” dettato dalla definizione?
✦Potete fare di meglio? (Soluzione di Gauss)
✦Qual è il ruolo del modello di calcolo?
Page 17
17
© Alberto Montresor
Moltiplicare numeri complessiMoltiplicare numeri complessi
✦Questioni aperte...✦Si può fare di meglio?
✦Oppure, è possibile dimostrare che non si può fare di meglio?
✦Alcune riflessioni✦In questo modello “estremamente semplice”, effettuare 3 moltiplicazioni invece di 4 risparmia il 25% del costo
✦Esistono contesti in cui effettuare 3 moltiplicazioni invece di 4 può produrre un risparmio maggiore
Page 18
18
© Alberto Montresor
Sommare numeri binariSommare numeri binari
✦Algoritmo elementare della somma - sum()✦richiede di esaminare tutti gli n bit✦costo totale cn (c ≡ costo per sommare tre bit e generare riporto)
✦Domanda✦Esiste un metodo più efficiente?
* * * * * * * * * * * * * * ** * * * * * * * * * * * * * *
+* * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
Page 19
19
© Alberto Montresor
Moltiplicare numeri binariMoltiplicare numeri binari
* * * * * * * * * * * * * *
* * * * * * ** * * * * * *
* * * * * * ** * * * * * ** * * * * * *
* * * * * * * * * * * * * *
x
n2
✦Algoritmo “elementare” del prodotto - prod()
Page 20
20
© Alberto Montresor
Moltiplicare numeri binari
✦Confronto fra i costi di esecuzione✦Somma: Tsum(n) = c1n
✦Prodotto: Tprod(n) = c2n2 + c3n
✦Si potrebbe erroneamente concludere che...✦Il problema della moltiplicazione è inerentemente più costoso del problema dell'addizione
✦“Conferma” la nostra esperienza
Page 21
21
© Alberto Montresor
Moltiplicare numeri binari
✦ Confronto fra problemi✦Per provare che il problema del prodotto è più costoso del problema della somma, dobbiamo provare che non esiste una soluzione in tempo lineare per il prodotto
✦Abbiamo confrontato gli algoritmi, non i problemi✦A parità di dimensione dell'input:l'algoritmo di somma è più efficiente dell'algoritmo del prodotto
✦Questione aperta se esista un algoritmo in tempo lineareper il prodotto
✦Esiste comunque la possibilità di migliorare
Page 22
22
© Alberto Montresor
Moltiplicare numeri binariMoltiplicare numeri binari
✦Un metodo algoritmico: divide-et-impera✦Divide: dividi il problema in sottoproblemi di dimensioni inferiori
✦Impera: risolvi i sottoproblemi in maniera ricorsiva
✦Combina: unisci le soluzioni dei sottoproblemi in modo da ottenere la risposta del problema principale
✦Moltiplicazione ricorsiva✦X = a 2n/2 + b
✦Y = c 2n/2 + d
✦XY = ac 2n + (ad+bc) 2n/2 + bd
✦Nota: ✦Moltiplicare per 2t ≡ shift di t posizioni, in tempo lineare✦Sommare due vettori di bit anch’esso in tempo lineare
a b
c d
Page 23
23
© Alberto Montresor
Moltiplicare numeri binariMoltiplicare numeri binari
✦Algoritmo pdi(): prodotto divide-et-impera
✦Costo della procedura pdi()
Page 24
24
© Alberto Montresor
Svolgere la ricorsioneSvolgere la ricorsione
Level i is the sum of 4i copies of n/2i
1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
. . . . . . . . . . . . . . . . . . . . . . . . . .
n/2 + n/2 + n/2 + n/2
nn0
n/2
n/2
n/2
n/2
1
n/4
n/4
n/4
n/4
n/4
n/4
n/4
n/4
n/4
n/4
n/4
n/4
n/4
n/4
n/4
n/4
2
log2 n ............................................................................
.......................
Livello i: ∑4i istanze di dimensione n/2ii
Page 25
25
© Alberto Montresor
Moltiplicare numeri binari
✦Confronto fra algoritmi: tutto questo lavoro per niente?✦Tprod(n) = O(n2)
✦Tpdi(n) = O(n2)
✦La versione ricorsiva chiama se stessa 4 volte. ✦X = a 2n/2 + b
✦Y = c 2n/2 + d
✦XY = ac 2n + (ad+bc) 2n/2 + bd
✦Domanda✦E' possibile ridurre il numero di moltiplicazioni?
Page 26
26
© Alberto Montresor
Moltiplicazione di Karatsuba (1962)
✦Gaussified-product (Karatsuba 1962)✦A1 = ac
✦A3 = bd
✦m = (a+b)(c+d)=ac+ad+bc+bd
✦A2 = m−A1−A3=ad+bc
Page 27
27
© Alberto Montresor
Moltiplicare numeri binariMoltiplicare numeri binari
✦Gaussified-product (Karatsuba 1962)
✦Esempio: ✦Tpdi(106) =1012
✦Tkaratsuba(106) = 3 10⋅ 9
✦Conclusioni✦L'algoritmo “naif” non è sempre il migliore...
✦... può esistere spazio di miglioramento...
✦... a meno che non sia possibile dimostrare il contrario!
Page 28
28
© Alberto Montresor
Ordinamento
✦Problema dell'ordinamento✦Input: una sequenza A di n numeri <a1, a2, ..., an>
✦Output: una permutazione B=<b1, b2, ..., bn> di A tale per cuib1 ≤ b2 ≤ ... ≤ bn
✦Algoritmo “naif”✦Generare tutte le permutazioni (n!) e verificare in tempo O(n)se sono ordinate
✦Costo totale: O(n n!)
Page 29
29
© Alberto Montresor
Selection sort
✦Complessità (caso medio, pessimo, ottimo)
Page 30
30
© Alberto Montresor
Insertion Sort
✦Algoritmo efficiente per ordinare piccoli insiemi di elementi
✦Come ordinare una sequenza di carte da gioco “a mano”
Page 31
31
© Alberto Montresor
Insertion Sort - AnalisiInsertion Sort - Analisi
✦Per questo algoritmo:✦Il costo di esecuzione non dipende solo dalla dimensione...
✦ma anche dalla distribuzione dei dati in ingresso
✦Domande✦Qual è il costo nel caso il vettore sia già ordinato?
✦Qual è il costo nel caso il vettore sia ordinato in ordine inverso?
✦Cosa succede “in media”?✦Informalmente
Page 32
32
© Alberto Montresor
Merge Sort
✦Insertion Sort✦E' basato su un approccio incrementale (A[1...j-1] ordinato, aggiungi A[j])
✦Merge Sort✦E' basato sulla tecnica divide-et-impera vista in precedenza
✦Divide:✦Dividi l'array di n elementi in due sottovettori di n/2 elementi
✦Impera:✦Chiama MergeSort ricorsivamente su i due sottovettori
✦Combina:✦Unisci (merge) le due sequenze ordinate
Page 33
33
© Alberto Montresor
Merge Sort
✦Il nucleo di Merge Sort è nel passo combina (merge)✦merge(A, primo, ultimo, mezzo)
✦A è un array di lunghezza n✦primo, ultimo, mezzo indici tali per cui
1 ≤ primo ≤ mezzo < ultimo ≤ n
✦La procedura merge() suppone che i sottovettori A[primo...mezzo] e A[mezzo+1...ultimo] siano ordinati
✦I due vettori vengono fusi in un unico sottovettore ordinato A[primo...ultimo]
✦Qual è l'idea?✦Fondere i due sottovettori “sfruttando” il fatto che sono ordinati
Page 34
34
© Alberto Montresor
Merge SortMerge Sort
Page 35
35
© Alberto Montresor
Merge Sort
✦Come funziona merge():A B
1 5 7 + 2 4 6
5 7 + 2 4 6 1
5 7 + 4 6 1 2
5 7 + 6 1 2 4
7 + 6 1 2 4 5
7 + 1 2 4 5 6
+ 7 1 2 4 5 6
1 2 4 + 5 6 7
✦Domanda✦ Costo computazionale di merge()
Page 36
36
© Alberto Montresor
Merge SortMerge Sort
✦Programma completo✦Chiama ricorsivamente se stesso e usa merge() per unire i risultati
✦Caso base: sequenze di lunghezza ≤ 1 sono già ordinate
Page 37
37
© Alberto Montresor
Merge SortMerge Sort
Partizionamento
Merge
Page 38
38
© Alberto Montresor
Analisi di Merge-Sort
✦Una assunzione semplificativa✦n=2k, ovvero l'altezza dell'albero di sottodivisioni è esattamente k
✦tutti i sottovettori hanno dimensioni che sono potenze esatte di 2
✦Costi di Merge Sort
✦Risoluzione della ricorrenza
✦Domanda✦Ricavare questo risultato svolgendo l’equazione di ricorrenza
Page 39
39
© Alberto Montresor
Confronto fra ordini di grandezza
Page 40
40
© Alberto Montresor
Limitazioni inferiori e algoritmi ottimi
✦Dato un problema✦Se trovate un algoritmo A con complessità O(g(n)), avete stabilito un limite superiore alla complessità del problema - g(n)
✦Se dimostrate che qualunque algoritmo per il problema deve avere complessità Ω(f(n)), avete stabilito un limite inferiore alla complessità del problema - f(n)
✦Se f(n)=g(n), allora A è un algoritmo ottimo
Page 41
41
© Alberto Montresor
Limitazioni inferiori - tecniche
✦Dimensione dei dati✦Se un problema ha in ingresso n dati e richiede di esaminarli tutti, allora una limitazione inferiore della complessità è Ω(n)
✦Esempio: sommare due numeri binari
✦Eventi contabili✦Se un problema richiede che un certo evento sia ripetuto almeno n volte, allora una limitazione inferiore della complessità è Ω(n)
✦Esempio: ricerca del minimo richiede almeno n-1 confronti
✦Oracolo✦Se un oracolo, utilizzando una certa regola ignota all’algoritmo, “divina” ad ogni opportunità la situazione più sfavorevole, allora combattendo contro di esso si può individuare una limitazione inferiore
✦Esempio: merge()
Page 42
42
© Alberto Montresor
Limitazioni inferiori
✦Caveat emptor!✦Le tecniche illustrate sono semplici, ma nascondono sottigliezze
✦Fare attenzioni alle assunzioni di base✦Ricerca in vettore ordinato: O(log n), non O(n)!✦Ricerca del minimo in vettore ordinato: O(1), non O(n)!
✦Esempio più complesso: ordinamento✦Limitazione inferiore Ω(n) - perché?
✦Limitazione superiore O(n log n)
✦Possiamo “restringere” questo scarto?
✦Più avanti mostremo...
Page 43
43
© Alberto Montresor
Limitazioni inferiori
✦Caveat emptor!✦Le tecniche illustrate sono semplici, ma nascondono sottigliezze
✦Fare attenzioni alle assunzioni di base✦Ricerca in vettore ordinato: O(log n), non O(n)!✦Ricerca del minimo in vettore ordinato: O(1), non O(n)!
✦Esempio più complesso: ordinamento✦Limitazione inferiore Ω(n) - perché?
✦Limitazione superiore O(n log n)
✦Possiamo “restringere” questo scarto?
✦Più avanti mostreremo...✦che Merge Sort è ottimo, in quanto è possibile dimostrare che Ω(n log n) è un limite inferiore all’ordinamento per gli algoritmibasati su confronti
Page 44
44
© Alberto Montresor
Counting Sort
✦Come funziona:✦I numeri da ordinare sono compresi in un range [1..k]
✦Costruire un array B[1..k] che conta il numero di volte che compare un valore in [1..k]
✦Ricollocare i valori così ottenuti in A
Page 45
45
© Alberto Montresor
Counting Sort
✦Complessità✦O(n+k)
✦Se k è O(n), allora la complessità è O(n)
✦Discussione su limite inferiore✦Counting Sort non è basato su confronti
✦Abbiamo cambiato le condizioni di base
✦Se k è O(n3), questo algoritmo è peggiore di tutti quelli visti finora
Page 46
46
© Alberto Montresor
Tecniche di analisi
✦Per risolvere le relazioni di ricorrenza✦Analisi per sostituzione (accennata)
✦Analisi per livelli (accennata)
✦Relazioni di ricorrenza comuni✦Ricorrenze lineari di ordine costante✦Ricorrenze lineari con partizione bilanciata
✦Analisi per tentativi
✦Alla lavagna!
Page 47
47
© Alberto Montresor
Analisi ammortizzata
Si considera il tempo richiesto per eseguire, nel caso pessimo, un'intera sequenza di operazioni
✦Sequenza✦Operazioni costose e meno costose
✦Se operazioni più costose sono poco frequenti, allora il loro costo può essere ammortizzato dalle operazioni meno costose
✦Importante differenza✦Analisi del caso medio:
✦basata su probabilità, su singola operazione
✦Analisi ammortizzata: ✦deterministica, su operazioni multiple, caso pessimo
Page 48
48
© Alberto Montresor
Metodi per l'analisi ammortizzata
✦Metodo dell'aggregazione✦Si calcola la complessità O(f(n)) per eseguire n operazioni in sequenza nel caso pessimo
✦Il costo ammortizzato di una singola operazione è O(f(n)/n)
✦Metodo degli accantonamenti (o del contabile)✦Alle operazioni vengono assegnati costi ammortizzati che possono essere maggiori/minori del loro costo effettivo
✦Provare che la somma dei costi ammortizzati è unlimite superiore al costo effettivo
✦Metodo del potenziale✦Lo stato del sistema viene descritto tramite differenze di potenziale
✦Tecnica derivata dalla fisica
Page 49
49
© Alberto Montresor
EsempioEsempio
✦Contatore binario✦Implementiamo un contatore binario di k bit con un array di bit
✦Un numero binario x registrato in A ha il bit meno significativo in A[0] e il più significativo in A[k-1] per cui:
✦Supponiamo che A venga usato per contare a partire da x=0 usando l’operazione di incremento
Page 50
50
© Alberto Montresor
Esempio - ContatoreEsempio - Contatore
8 0 0 0 0 1 0 0 0 15
9 0 0 0 0 1 0 0 1 16
10 0 0 0 0 1 0 1 0 18
14 0 0 0 0 1 1 1 0 25
13 0 0 0 0 1 1 0 1 23
11 0 0 0 0 1 0 1 1 19
12 0 0 0 0 1 1 0 0 22
15 0 0 0 0 1 1 1 1 26
16 0 0 0 1 0 0 0 0 31
x A[7] A[6] A[5] A[4] A[3] A[2] A[1] A[0] costo
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 1 1
2 0 0 0 0 0 0 1 0 3
3 0 0 0 0 0 0 1 1 4
4 0 0 0 0 0 1 0 0 7
5 0 0 0 0 0 1 0 1 8
6 0 0 0 0 0 1 1 0 10
7 0 0 0 0 0 1 1 1 11
Page 51
51
© Alberto Montresor
Esempio - Contatore
✦Analisi “grossolana”✦Una singola operazione di incremento richiede tempo O(k) nel caso pessimo
✦Limite superiore O(nk) per una sequenza di n incrementi
✦Considerazioni per un'analisi più stretta✦Possiamo però osservare che il tempo necessario ad eseguire l’intera sequenza è proporzionale al numero di bit che vengono modificati
✦Quanti bit vengono modificati?
Page 52
52
© Alberto Montresor
Esempio: funzionamentoEsempio: funzionamento
8 0 0 0 0 1 0 0 0 15
9 0 0 0 0 1 0 0 1 16
10 0 0 0 0 1 0 1 0 18
14 0 0 0 0 1 1 1 0 25
13 0 0 0 0 1 1 0 1 23
11 0 0 0 0 1 0 1 1 19
12 0 0 0 0 1 1 0 0 22
15 0 0 0 0 1 1 1 1 26
16 0 0 0 1 0 0 0 0 31
x A[7] A[6] A[5] A[4] A[3] A[2] A[1] A[0] costo
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 1 1
2 0 0 0 0 0 0 1 0 3
3 0 0 0 0 0 0 1 1 4
4 0 0 0 0 0 1 0 0 7
5 0 0 0 0 0 1 0 1 8
6 0 0 0 0 0 1 1 0 10
7 0 0 0 0 0 1 1 1 11
Page 53
53
© Alberto Montresor
Esempio – Metodo dell'aggregazione
✦Dalla simulazione si vede che:✦A[0] viene modificato ad ogni incremento del contatore,
✦A[1] viene modificato ogni 2 incrementi,
✦A[2] viene modificato ogni 4 incrementi....
✦In generale, ✦A[i] viene modificato ogni 2i incrementi
✦Quindi:✦Costo aggregato:
✦Costo ammortizzato: 2n/n = 2 = O(1)
Page 54
54
© Alberto Montresor
Metodo degli accantonamenti o del contabile
✦Si assegna un costo ammortizzato distinto(*) ad ognuna delle operazioni possibili
✦Il costo ammortizzato può essere diverso dal costo effettivo✦Le operazioni meno costose vengono caricate di un costo aggiuntivo detto credito
✦costo ammortizzato = costo effettivo + credito prodotto
✦I crediti accumulati saranno usati per pagare le operazioni più costose✦costo ammortizzato = costo effettivo – credito consumato
(*) Nell'aggregazione, abbiamo calcolato costo ammortizzato costante
Page 55
55
© Alberto Montresor
Come assegnare costi ammortizzati?Come assegnare costi ammortizzati?
✦Lo scopo è:✦dimostrare che la somma dei costi ammortizzati ai è un limite superiore ai costi effettivi ci:
✦dimostrare che il valore così ottenuto è “poco costoso”
✦Alcuni punti da ricordare✦La dimostrazione deve essere valida per tutte le sequenze di input (caso pessimo)
✦Il credito è espresso dalla seguente formula e quindi è positivo
Page 56
56
© Alberto Montresor
Esempio – Metodo degli accantonamentiEsempio – Metodo degli accantonamenti
✦Costi✦Costo effettivo dell'operazione increment(): d (dove d è il numero di bit che cambiano valore)
✦Costo ammortizzato dell'operazione increment(): 2✦1 per cambio del bit da 0 a 1 (costo effettivo)✦1 per il futuro cambio dello stesso bit da 1 a 0
✦Ne segue che: ✦in ogni istante, il credito è pari al numero di bit 1 attualmente presenti
✦Costo totale ammortizzato: O(n)
Page 57
57
© Alberto Montresor
Metodo del potenzialeMetodo del potenziale
✦Come funziona✦Si associa alla struttura dati D una funzione di potenziale Φ(D)
✦Requisiti:✦le operazioni meno costose devono incrementare Φ(D)✦le operazioni più costose devono decrementare Φ(D)
✦Costo ammortizzato:✦sommatoria del costo effettivo e della variazione di potenziale
Page 58
58
© Alberto Montresor
Metodo del potenzialeMetodo del potenziale
✦Il costo ammortizzato di una sequenza di n operazioni è:
✦Se la variazione di potenziale Φ(Dn)-Φ(D0) è non negativa:✦il costo ammortizzato A è un limite superiore al costo reale
✦Altrimenti:✦la variazione di potenziale negativa deve essere compensata da un aumento adeguato del costo ammortizzato delle operazioni.
Page 59
59
© Alberto Montresor
Esempio 2 – Metodo del potenzialeEsempio 2 – Metodo del potenziale
✦Scegliamo come funzione potenziale Φ(A) il numero bit 1 presenti nel contatore
✦Nota:✦t è il numero di bit 1 incontrati a partire dal meno significativo, prima di incontrare un bit 0
✦Partendo dal valore 0✦All'inizio, zero bit accesi → Φ(A0) = 0
✦Alla fine, Φ(An) ≥ 0 → la differenza di potenziale è non negativa
operazione costo differenza di costo effettivo potenziale ammortizzato
add 1+t -t+1 2
Page 60
60
© Alberto Montresor
EserciziEsercizi
✦Esercizio 1✦Dato un array A[1..n] di interi e un intero v, descrivere un algoritmo che determini se esistono due elementi in A la cui somma è esattamente v
✦Esercizio 2✦Dato un array A[1..n] di interi positivi, descrivere un algoritmo O(n) che determini se esistono due elementi in A la cui somma è esattamente 17
✦Esercizio 3✦Siano date n monete d'oro, tutte dello stesso peso tranne una contraffatta che pesa meno, ed una bilancia con due piatti.Disegnare un algoritmo per individuare la moneta contraffatta in al più log n pesate.