Saltar al contenido

Recorrido narrado

Por qué la suma no se dispara

Con la regla de duplicar, cuando el array llega a n valores, los crecimientos copiaron:

Texto
1 + 2 + 4 + 8 + … + (la potencia de 2 menor que n)

Con 4 crecimientos se copian 1 + 2 + 4 + 8 = 15, menos que 16, el doble del último término. En general, 1 + 2 + … + 2ᵏ = 2ᵏ⁺¹ − 1, menos que el doble del último término; y como ese término es menor que n, las copias son menos de 2n. A eso se suman las n escrituras de los valores nuevos. En total, menos de 3n operaciones para n inserciones.

En la figura, las 16 primeras inserciones empezando con capacidad 1: cada barra suma la escritura y las copias de esa inserción.

Costo de dieciséis inserciones duplicando la capacidadGráfico de barras apiladas para las inserciones 1 a 16, empezando con capacidad 1. Cada inserción tiene una escritura. Las inserciones 2, 3, 5 y 9 además copian 1, 2, 4 y 8 valores al crecer, en la parte superior de la barra con un número. Total: 16 escrituras y 15 copias, 31 operaciones, menos que 3 por 16, que es 48.operaciones por inserciónescritura (1)copias al crecer1+12+234+45678+8910111213141516inserción número16 escrituras + 15 copias (1 + 2 + 4 + 8) = 31 operaciones, menos de 3 × 16 = 48
Las copias (1, 2, 4, 8) son cada vez más escasas y su suma, 15, queda por debajo de n = 16. Repartidas entre las 16 inserciones, cada una cuesta menos de 3 operaciones de media.

Repartido entre las n inserciones, cada una cuesta menos de 3 operaciones de media. A ese reparto se le llama costo amortizado: O(1) amortizado por inserción.

No dice que cada inserción sea barata. La inserción que provoca un crecimiento copia todo: O(n) en el peor caso. Lo que dice es que, en cualquier secuencia de inserciones, el total está acotado.

Texto
función agregar(v, x):    si longitud(v) = capacidad(v):        crecer(v, max(1, 2 × capacidad(v)))    v[longitud(v)] ← x    longitud(v) ← longitud(v) + 1

Su fila en la tabla de costos

El array dinámico completa la fila del array con su regla de crecimiento:

Representación leer(i) insertar o borrar al inicio insertar al final borrar al final insertar o borrar en i
array dinámico (duplica) O(1) O(n), peor caso O(1) amortizado; O(n) peor caso O(1) O(n), peor caso

Lee el recorrido de esta página. Al pasar al siguiente momento, este cuenta como leído.