Definition
Space Complexity
The space complexity of an algorithm is a function that bounds the amount of memory it uses in terms of the length of the encoded input.
Formally, fix an encoding of problem instances. For an instance , let
be the number of symbols in the encoded input. The worst-case space complexity of an algorithm is the function
Thus, space complexity measures how memory usage grows as the encoded input length grows.
Encoding
Space complexity is measured relative to an encoding, just like time complexity. A numeric value may be much larger than its encoded length.
For example, a capacity written in binary has length , while storing a table with one cell for every value uses space.
This is why pseudo-polynomial dynamic programming can also have pseudo-polynomial space usage: the table can be polynomial in the numeric values, but exponential in the binary input length.
Polynomial Bound
An algorithm uses polynomial space if there exist fixed constants such that, for every instance ,
The exponent is fixed for the algorithm. It cannot depend on the instance.
Examples
Dynamic programming table
A knapsack-style dynamic programme with table entries for and uses
table cells.
If is encoded in binary, then , where . Hence the space usage may be exponential in the encoded length of .
If is encoded in unary, the input length is already , so the same table size is polynomial in the input length.