Amortization

Please read Asymptotic Analysis Basics first. If you don't, none of this will make any sense!

Amortization means spreading out.

This is especially good for functions where most actions have a low cost, but a few have a high cost. We'll see an example of this further down the page!

A Case Study: Resizing Arrays

As you probably know, normal Java arrays don't resize. If we create a new int[5] then that array will always have a length of 5.

But what if we wanted to make an array resize itself every time it reaches capacity? (Like a List!) Let's see what happens when we add one to the array size:

First, we have to make a new array with a new size:

Then, we have to copy over all of the old elements over:

Finally, we can add in the new element!

Let's analyze the runtime of this operation.

What if we doubled the size instead of adding one?

    • We do this every time the array hits a power of 2 (2, 4, 8, 16, 32 ...).

    • We do this every time we add a new element, so in all we add n elements. Therefore, this is an

Intuitively, this looks like this:

Mathematically, it looks like this:

Last updated