Il tempo di esecuzione ammortizzato di un’operazione all’interno di una serie di operazioni è il tempo di esecuzione nel caso pessimo diviso per il numero di operazioni.
Ho un array di dimensione C, e voglio farlo arrivare a dimensione
Ogni volta che voglio ingrandire l’array ho due opzioni:
- ingrandisco di altre C dimensioni, copio la dimensione dell’array (1C, 2C,..ecc) e esegui C operazioni O(1) (strategia incrementale).
- raddoppio la dimensione dell'array, copio i suoi elementi (1C, 2C, 4C, 8C, ...) e eseguo le operazioni di aggiunta. (strategia del raddoppio)
Compariamo le due strategie analizzando il tempo totale T(n) impiegato per eseguire n operazioni di aggiunta.
Chiamiamo tempo ammortizzato di operazioni di aggiunta il tempo medio impiegato da un'operazione di aggiunta oltre le serie di operazioni.
Assumendo di iniziare con una lista vuota rappresentata da un array di dimensione 1.
Dopo n operazioni di aggiunta, rimpiazziamo l'array k= n/c volte, dove c è una costante.
Il tempo totale T(n) di una serie di n operazioni di aggiunta è proporzionale a
Dato che c è una costante, T(n) è
Rimpiazziamo l'array
T(n) è O(n).
Il tempo di esecuzione ammortizzato è O(1)