\( O(g(n)) \) = {\( f(n) \): there exist positive constants \( c \) and \( n_0 \) such that \( f(n) \leq c*g(n) \) for all \( n \geq n_0 \) }
Complexity | Notation | Description |
---|---|---|
constant | O(1) | Constant number of operations, not depending on the input data size, e.g. n = 1 000 000 → 1-2 operations |
logarithmic | O(log n) | Number of operations proportional of log2(n) where n is the size of the input data, e.g. n = 1 000 000 000 → 30 operations |
linear | O(n) | Number of operations proportional to the input data size, e.g. n = 10 000 → 5 000 operations |
quadratic | O(n^2) | Number of operations proportional to the square of the size of the input data, e.g. n = 500→ 250 000 operations |
cubic | O(n^3) | Number of operations proportional to the cube of the size of the input data, e.g. n = 200 → 8 000 000 operations |
exponential | O(2^n) O(k^n) O(n!) |
Exponential number of operations, fast growing, e.g. n = 20 → 1 048 576 operations |
Complexity | 10 | 20 | 50 | 100 | 1000 | 10000 | 100000 |
---|---|---|---|---|---|---|---|
O(1) | < 1s | < 1s | < 1s | < 1s | < 1s | < 1s | < 1s |
O(log n) | < 1s | < 1s | < 1s | < 1s | < 1s | < 1s | < 1s |
O(n) | < 1s | < 1s | < 1s | < 1s | < 1s | < 1s | < 1s |
O(n*logn) | < 1s | < 1s | < 1s | < 1s | < 1s | < 1s | < 1s |
O(n^2) | < 1s | < 1s | < 1s | < 1s | < 1s | 2s | 3-4 min |
O(n^3) | < 1s | < 1s | < 1s | < 1s | 20 s | 5 hours | 231 days |
O(2^n) | < 1s | < 1s | 26 days | hangs | hangs | hangs | hangs |
O(n!) | < 1s | hangs | hangs | hangs | hangs | hangs | hangs |
O(n^n) | hangs | hangs | hangs | hangs | hangs | hangs | hangs |
int FindMaxElement(int[] array)
{
int max = array[0];
for (int i = 0; i < array.Length; i++)
{
if (array[i] > max)
{
max = array[i];
}
}
return max;
}
long FindInversions(int[] array)
{
long inversions = 0;
for (int i = 0; i < array.Length; i++)
for (int j = i + 1; j < array.Length; i++)
if (array[i] > array[j])
inversions++;
return inversions;
}
decimal Sum3(int n)
{
decimal sum = 0;
for (int a = 0; a < n; a++)
for (int b = 0; b < n; b++)
for (int c = 0; c < n; c++)
sum += a * b * c;
return sum;
}
long SumMN(int n, int m)
{
long sum = 0;
for (int x = 0; x < n; x++)
for (int y = 0; y < m; y++)
sum += x * y;
return sum;
}
long SumMN(int n, int m)
{
long sum = 0;
for (int x = 0; x < n; x++)
for (int y = 0; y < m; y++)
if (x == y)
for (int i = 0; i < n; i++)
sum += i * x * y;
return sum;
}
decimal Calculation(int n)
{
decimal result = 0;
for (int i = 0; i < (1 << n); i++)
result += i;
return result;
}
decimal Factorial(int n)
{
if (n == 0)
return 1;
else
return n * Factorial(n-1);
}
decimal Fibonacci(int n)
{
if (n == 0)
return 1;
else if (n == 1)
return 1;
else
return Fibonacci(n-1) + Fibonacci(n-2);
}