En términos simples, ¿qué es la complejidad del tiempo amortizado?

Explicación en términos simples
Si dice que una operación tiene un tiempo amortizado de [math] \ Theta (1) [/ math], eso significa que la operación se ejecutará en [math] \ Theta (1) [/ math] en promedio si se ejecuta suficientes veces en sucesión. Eso significa que en algunos escenarios, podría ejecutarse en [matemáticas] \ Theta (n) [/ matemáticas] en el tiempo o peor. Es similar al análisis de complejidad de tiempo de “caso promedio”, pero no necesariamente hace suposiciones sobre los datos de entrada. Más bien, hace suposiciones sobre el patrón de uso de la operación amortizada.

Ejemplo
Por ejemplo, considere una lista que se implementa con una matriz redimensionable. Decimos que insert () se ejecuta en [math] \ Theta (1) [/ math] tiempo amortizado por operación. Sin embargo, cuando la matriz interna está llena, tenemos que generar una nueva matriz que tal vez sea el doble del tamaño de la matriz anterior y copiar los valores anteriores antes de poder insertar el nuevo valor. Esto lleva tiempo [math] \ Theta (n) [/ math]. Pero sabemos que no todas las inserciones en la matriz activarán el cambio de tamaño. La mayoría de las operaciones se ejecutarán en tiempo constante. Más exactamente, cada operación [matemática] n [/ matemática], tenemos que cambiar el tamaño de la matriz. Si tenemos una operación que requiere [matemática] \ Theta (n) [/ matemática] cada [matemática] n [/ matemática] veces que se llama, entonces en la operación regular de un programa, podemos esperar [matemática] \ Theta (1) [/ math] tiempo por operación.

Imagina que tienes una canasta de 10 manzanas. Empiezas a comer la manzana una a la vez. Cada manzana es aparentemente libre. Sin embargo, cuando la canasta está vacía, paga 10 dólares para que se vuelva a llenar.

Entonces, en general, pagaste 0,0,0 … 10 dólares cada vez.

Decimos que cada manzana tiene un costo amortizado de 1 dólar.

Considere un inquilino que paga una cantidad de 300 dólares el primer día de cada mes, no significa que el alquiler de la casa sea de 300 dólares por este solo día. En cambio, tiene mucho más sentido decir que el alquiler de la habitación es de 10 dólares al día. Lo mismo ocurre con la complejidad del tiempo amortizado. Si hay alguna operación costosa (tiempo costosa) de vez en cuando. divide el costo de la operación por el período que lleva repetir nuevamente. En el caso anterior es 300/30 = 10

Un error común es que el tiempo amortizado se refiere al tiempo “promedio”. El tiempo amortizado es en realidad una garantía estricta: un algoritmo que tiene un tiempo de ejecución amortizado de f (n) ejecutará cualquier secuencia válida de m operaciones en la mayoría de los pasos m * f (n).

Es aproximadamente el tiempo promedio que se tarda en completar una operación. Esto permite que las operaciones individuales demoren mucho más o menos tiempo que el tiempo amortizado.

Por ejemplo, si realiza 100 inserciones en un vector, y el costo es de 250 en total, el costo amortizado de una inserción individual es 250/100 = 2.5.

Para una introducción más larga, lea mi artículo ¿Qué es el tiempo amortizado?