Oi Bruno,
Quanto maior o número de elementos, mais próximo do tempo constante amortizado estaremos?
Legal você ter perguntado!
O custo amortizado é constante mesmo, não importando o número de operações add().
Considere uma sequência de operações add() em um vetor redimensionável utilizando a política de redimensionamento "encheu, dobre o vetor, copie tudo, segueg o jogo".
Vamos utilizar a metáfora contábil.
Na metáfora contábil cada $1 paga por uma quantidade constante de tempo consumido.
Cada add() tem custo amortizado de não mais do que $3.
De fato. Dê $3 a cada item inserido no vetor.
O item paga $1 ao add() pelo gasto de inseri-lo no vetor e guarda $2 para um possível futuro redimensionamento. Se esse possível redimensionamente ocorrer o item paga $1 pela sua cópia para o novo vetor e paga $1 pela cópia de um item que está na "metade inferior" do vetor e não tem dim-dim $.
A tabela abaixo "comprova" essa argumentação:
t representa o tamanho do vetor.
custo é o custo real da operação.
crédito é quanto o item recebe para pagar a operação.
saldo é a soma dos custo até o momento menos o créditos recebidos pelos itens até o momento
- relação invariante fundamental:
saldo >= 0
Da relação fundamental concluímos que o custo por n operações add() é não superior a $3n e portanto o custo médio (amortizado) de cada operação é não superior a $3.
| 1 |
1 |
1 |
$3 |
$2 |
| 2 |
2 |
1 + 1 |
$3 |
$1 |
| 3 |
4 |
1 + 2 |
$3 |
$1 |
| 4 |
4 |
1 |
$3 |
$3 |
| 5 |
8 |
1 + 4 |
$3 |
$2 |
| 6 |
8 |
1 |
$3 |
$4 |
| 7 |
8 |
1 |
$3 |
$6 |
| 8 |
8 |
1 |
$3 |
$8 |
| 9 |
16 |
1 + 8 |
$3 |
$2 |
| 10 |
16 |
1 |
$3 |
$4 |
| 11 |
16 |
1 |
$3 |
$6 |
| ... |
16 |
1 |
$3 |
$16 |
| 17 |
32 |
1 + 16 |
$3 |
$2 |
| 33 |
64 |
1 + 32 |
$3 |
$2 |