Incrementar un Número Binario
Seguiremos con un problema también de juguete, aunque algo más complicado y con una aplicación que veremos después. Supongamos que debemos incrementar un número binario de dígitos, desde hasta . Llamemos . Consideremos que el costo de incrementar un número es la cantidad de bits que debemos invertir. Como se invierten todos los 1s hasta el primer 0 de derecha a izquierda, el costo de incrementar varía entre 1 y según el número que incrementemos. Subrayamos a continuación los bits invertidos para .
El peor caso es, como dijimos, tener que invertir bits (al pasar de de a ), por lo cual la secuencia de las inversiones cuesta operaciones. Esto es cierto, pero no ajustado. Veremos que en realidad, se realizan en total menos de inversiones de bits, es decir, el costo amortizado de incrementar cada número es a lo más .
--> imagen de ambas estrategias
Análisis global
La primera forma de verificar esto es mirar los costos de una forma diferente, que permita sumarlos con más facilidad. Miremos los bits subrayados por columnas y no por filas. Así se verá que el último bit del número cambia siempre, el penúltimo cambia una vez cada , el antepenúltimo cambia una vez cada , y así. Sumando los bits subrayados por columnas tenemos
Contabilidad de costos
La segunda forma es notar que cada operación realiza exactamente una inversión de la forma , y cero o más inversiones . Como comenzamos con una secuencia de 0s, todo 1 fue un 0 alguna vez. Podemos entonces cobrarle 2 operaciones a las inversiones , y cobrarle cero a las inversiones . De este modo, cobramos por adelantado en las inversiones la posible futura inversión de ese bit. Obtenemos entonces una cota superior fácil de sumar: incrementos cuestan inversiones a lo sumo.
Función potencial
Nuestra función potencial podría ser el número de 1s en la secuencia de bits actual. Tenemos entonces y . Consideremos lo que ocurre al incrementar una secuencia que termina con un último 0 y después 1s.
--> imagen
Se invierten el 0 y todos los 1s, por lo que el costo real es . Por otro lado, se pierden 1s y se gana uno (al convertir el 0 a 1), por lo cual . Esto nos da , y hemos obtenido nuevamente nuestro costo amortizado.
Nuevamente, los análisis son válidos si partimos de 0s y realizamos incrementos o menos, pero no si partimos de otra secuencia de bits. Por ejemplo, si partimos de y realizamos operaciones, entonces el costo, real o amortizado, por operación es , no .