Polynomial time and exponential time
AlgorithmAlgorithm Problem Overview
Could someone explain the difference between polynomialtime, nonpolynomialtime, and exponentialtime algorithms?
For example, if an algorithm takes O(n^2) time, then which category is it in?
Algorithm Solutions
Solution 1  Algorithm
Below are some common BigO functions while analyzing algorithms.
 O(1)  constant time
 O(log(n))  logarithmic time
 O((log(n))^{c})  polylogarithmic time
 O(n)  linear time
 O(n^{2})  quadratic time
 O(n^{c})  polynomial time
 O(c^{n})  exponential time
 O(n!)  factorial time
(n = size of input, c = some constant)
Here is the model graph representing BigO complexity of some functions
cheers :)
graph credits http://bigocheatsheet.com/
Solution 2  Algorithm
Check this out.
Exponential is worse than polynomial.
O(n^2) falls into the quadratic category, which is a type of polynomial (the special case of the exponent being equal to 2) and better than exponential.
Exponential is much worse than polynomial. Look at how the functions grow
n = 10  100  1000
n^2 = 100  10000  1000000
k^n = k^10  k^100  k^1000
k^1000 is exceptionally huge unless k is smaller than something like 1.1. Like, something like every particle in the universe would have to do 100 billion billion billion operations per second for trillions of billions of billions of years to get that done.
I didn't calculate it out, but ITS THAT BIG.
Solution 3  Algorithm
O(n^2) is polynomial time. The polynomial is f(n) = n^2. On the other hand, O(2^n) is exponential time, where the exponential function implied is f(n) = 2^n. The difference is whether the function of n places n in the base of an exponentiation, or in the exponent itself.
Any exponential growth function will grow significantly faster (long term) than any polynomial function, so the distinction is relevant to the efficiency of an algorithm, especially for large values of n.
Solution 4  Algorithm
Polynomial time.
A polynomial is a sum of terms that look like Constant * x^k
Exponential means something like Constant * k^x
(in both cases, k is a constant and x is a variable).
The execution time of exponential algorithms grows much faster than that of polynomial ones.
Solution 5  Algorithm
Exponential (You have an exponential function if MINIMAL ONE EXPONENT is dependent on a parameter):
 E.g. f(x) = constant ^ x
Polynomial (You have a polynomial function if NO EXPONENT is dependent on some function parameters):
 E.g. f(x) = x ^ constant
Solution 6  Algorithm
More precise definition of exponential
The definition of polynomial is pretty much universal and straightforward so I won't discuss it further.
The definition of Big O is also quite universal, you just have to think carefully about the M
and the x0
in the Wikipedia definition and work through some examples.
So in this answer I would like to focus on the precise definition of the exponential as it requires a bit more thought/is less well known/is less universal, especially when you start to think about some edge cases. I will then contrast it with polynomials a bit further below
 https://cstheory.stackexchange.com/questions/22588/isitrighttocall2sqrtnexponential
 https://math.stackexchange.com/questions/55468/howtoprovethatexponentialgrowsfasterthanpolynomial
The most common definition of exponential time is:
2^{polymonial(n)}
where polynomial
is a polynomial that:
 is not constant, e.g.
1
, otherwise the time is also constant  the highest order term has a positive coefficient, otherwise it goes to zero at infinity, e.g.
2^{n^2 + 2n + 1}
so a polynomial such as this would be good:
2^{n^2 + 2n + 1}
Note that the base 2 could be any number > 1 and the definition would still be valid because we can transform the base by multiplying the exponent, e.g.:
8^{polymonial(n)} = (2^3)^{polymonial(n)} = 2^{3 * polymonial(n)}
and 3 * polymonial(n)
is also a polynomial.
Also note that constant addition does not matter, e.g. 2^{n + 1} = 2 * 2^{n}
and so the + 1
does not matter for big O notation.
Therefore, two possible nice big O equivalent choices for a canonical "smallest exponential" would be for any small positive e
either of:
(1 + e)^{n}
2^{en}
for very small e
.
The highest order term of the polynomial in the exponent in both cases is n^1
, order one, and therefore the smallest possible nonconstant polynomial.
Those two choices are equivalent, because as saw earlier, we can transform base changes into an exponent multiplier.
Superpolynomial and subexponential
But note that the above definition excludes some still very big things that show up in practice and that we would be tempted to call "exponential", e.g.:
2^{n^{1/2}}
. This is a bit like a polynomial, but it is not a polynomial because polynomial powers must be integers, and here we have1/2
2^{log_2(n)^2}
Those functions are still very large, because they grow faster than any polynomial.
But strictly speaking, they are big O smaller than the exponentials in our strict definition of exponential!
This motivates the following definitions:
 superpolynomial: grows faster than any polynomial
 subexponential: grows less fast than any exponential, i.e.
(1 + e)^{n}
and all the examples given above in this section fall into both of those categories. TODO proof.
Keep in mind that if you put something very small on the exponential, it might go back to polynomial of course, e.g.:
2^{log_2(n)} = n
And that is also true for anything smaller than log_2
, e.g.:
2^{log_2(log_2(n))} = log_2(n)
is subpolynomial.
Important superpolynomial and subexponential examples

the general number field sieve the fastest 2020known algorithm for integer factorization, see also: https://stackoverflow.com/questions/2267146/whatisthefastestintegerfactorizationalgorithm/62393808#62393808 That algorithm has complexity of the form:
e^{(k + o(1))(ln(n)^(1/3) * ln(ln(n)))^(2/3)}
where
n
is the factored number, and the littleo notationo(1)
means a term that goes to 0 at infinity.That complexity even has a named generalization as it presumably occurs in other analyses: Lnotation.
Note that the above expression itself is clearly polynomial in
n
, because it is smaller thane^{ln(n)^(1/3) * ln(n))^(2/3)} = e^{ln(n)} = n
.However, in the context of factorization, what really matters is note
n
, but rather "the number of digits ofn
", because cryptography parties can easily generate crypto keys that are twice as large. And the number of digits grows aslog_2
. So in that complexity, what we really care about is something like:e^{(k + o(1))(n^(1/3) * ln(n)^(2/3)}
which is of course both superpolynomial and subexponential.
The fantastic answer at: https://stackoverflow.com/questions/16472012/whatwouldcauseanalgorithmtohaveologlogncomplexity/16472013#16472013 gives an intuitive explanation of where the
O(log log n)
comes from: whilelog n
comes from an algorithm that removes half of the options at each step, andlog log n
comes from an algorithm that reduces the options to the square root of the total at each step! 
https://quantumalgorithmzoo.org/ contains a list of algorithms which might be of interest to quantum computers, and in most cases, the quantum speedup relative to a classical computer is not strictly exponential, but rather superpolynomial. However, as this answer will have hopefully highlighted, this is still extremely significant and revolutionary. Understanding that repository is what originally motivated this answer :)
It is also worth noting that we currently do not expect quantum computers to solve NPcomplete problems, which are also generally expected to require exponential time to solve. But there is no proof otherwise either. See also: https://cs.stackexchange.com/questions/130470/canquantumcomputinghelpsolvenpcompleteproblems
https://math.stackexchange.com/questions/3975382/whatproblemsareknowntoberequiresuperpolynomialtimeorgreatertosolve asks about any interesting algorithms that have been proven superpolynomial (and presumably with proof of optimality, otherwise the general number sieve would be an obvious choice, but we don't 2020know if it is optimal or not)
Proof that exponential is always larger than polynomial at infinity
Discussions of different possible definitions of subexponential
Solution 7  Algorithm
polynomial time O(n)^k means Number of operations are proportional to power k of the size of input
exponential time O(k)^n means Number of operations are proportional to the exponent of the size of input
Solution 8  Algorithm
o(n sequre) is polynimal time complexity while o(2^n) is exponential time complexity if p=np when best case , in the worst case p=np not equal becasue when input size n grow so long or input sizer increase so longer its going to worst case and handling so complexity growth rate increase and depend on n size of input when input is small it is polynimal when input size large and large so p=np not equal it means growth rate depend on size of input "N". optimization, sat, clique, and independ set also met in exponential to polynimal.
Solution 9  Algorithm
Polynomial examples: n^2, n^3, n^100, 5n^7, etc….
Exponential examples: 2^n, 3^n, 100^n, 5^(7n), etc….
Solution 10  Algorithm
Here's the most simplest explaination for newbies:
A Polynomial: if an expression contains or function is equal to when a constant is the power of a variable e.g.
f(n) = 2 ^ n
while
An Exponential: if an expression contains or function is qual to when a variable is the power of a constant e.g.
f(n) = n ^ 2