What is meant by "Constant Amortized Time" when talking about time complexity of an algorithm?

# Constant Amortized Time

algorithmbig-ocomplexity-theory

###### Related Question

- Big O, how do you calculate/approximate it
- C# – How to check if a number is a power of 2
- What does O(log n) mean exactly
- Easy interview question got harder: given numbers 1..100, find the missing number(s) given exactly k are missing
- Ukkonen’s suffix tree algorithm in plain English
- How to building a heap be O(n) time complexity
- C++ – Image Processing: Algorithm Improvement for ‘Coca-Cola Can’ Recognition
- How to find time complexity of an algorithm
- Are 2^n and n*2^n in the same time complexity
- The optimal algorithm for the game 2048

## Best Solution

Amortised time explained in simple terms:

If you do an operation say a million times, you don't really care about the worst-case or the best-case of that operation - what you care about is how much time is taken in total when you repeat the operation a million times.

So it doesn't matter if the operation is very slow once in a while, as long as "once in a while" is rare enough for the slowness to be diluted away. Essentially amortised time means "average time taken per operation, if you do many operations". Amortised time doesn't have to be constant; you can have linear and logarithmic amortised time or whatever else.

Let's take mats' example of a dynamic array, to which you repeatedly add new items. Normally adding an item takes constant time (that is,

`O(1)`

). But each time the array is full, you allocate twice as much space, copy your data into the new region, and free the old space. Assuming allocates and frees run in constant time, this enlargement process takes`O(n)`

time where n is the current size of the array.So each time you enlarge, you take about twice as much time as the last enlarge. But you've also waited twice as long before doing it! The cost of each enlargement can thus be "spread out" among the insertions. This means that in the long term, the total time taken for adding

mitems to the array is`O(m)`

, and so the amortised time (i.e. time per insertion) is`O(1)`

.