Amortized Time Complexity

What Is Amortized Time Complexity

The time complexity per operation, derived by evaluating the total cost across a sequence of operations and distributing that cost among each individual operation.

Example

This is explained using a dynamic array as an example.

Assumptions:

  • A dynamic array with 0 elements and capacity 1 is created initially.
  • Elements are appended one at a time, for a total of N appends.
  • When capacity is exceeded, it is doubled.
  • When expanding, a new array is allocated and all existing elements are copied into it.
  • Writing and copying a single element takes O(1) time.
  • Allocating a new array takes O(1) time.

Time complexity of each operation:

  • Creating the initial array: O(1)
  • Writing N elements: O(N)
  • Allocating arrays for expansion (once per capacity overflow): O(log N)
  • Copying existing elements during expansion (once per capacity overflow): O(N)

The total time complexity of all operations is: O(1) + O(N) + O(N) + O(log N) = O(N)

The total time complexity of all expansion operations across every capacity overflow is: O(N) + O(log N) = O(N)

The total time complexity of all operations is O(N). Dividing by the number of append operations N gives the amortized time complexity: O(N) / N = O(1).

::note::

Example: Dynamic Array Operation

Current array (capacity: 4): [a, b, c, d] We want to append "e". Capacity is full, so we expand. A new array with capacity 4 × 2 = 8 is created. [_, _, _, _, _, _, _, _] The elements from the old array are copied to the new one. Copy 1: [a, _, _, _, _, _, _, _] Copy 2: [a, b, _, _, _, _, _, _] Copy 3: [a, b, c, _, _, _, _, _] Copy 4: [a, b, c, d, _, _, _, _] "e" is appended. [a, b, c, d, e, _, _, _] ::