Examples of Big-O analysis
Last Updated :
15 Jul, 2025
Prerequisite: Analysis of Algorithms | Big-O analysis
In the previous article, the analysis of the algorithm using Big O asymptotic notation is discussed. In this article, some examples are discussed to illustrate the Big O time complexity notation and also learn how to compute the time complexity of any program.
There are different asymptotic notations in which the time complexities of algorithms are measured. Here, the ''O''(Big O) notation is used to get the time complexities. Time complexity estimates the time to run an algorithm. It's calculated by counting the elementary operations. It is always a good practice to know the reason for execution time in a way that depends only on the algorithm and its input. This can be achieved by choosing an elementary operation, which the algorithm performs repeatedly, and define the time complexity T(N) as the number of such operations the algorithm performs given an array of length N.
Example 1:
The time complexity for the loop with elementary operations: Assuming these operations take unit time for execution. This unit time can be denoted by O(1). If the loop runs for N times without any comparison. Below is the illustration for the same:
C++
// C++ program to illustrate time
// complexity for single for-loop
#include <bits/stdc++.h>
using namespace std;
// Driver Code
int main()
{
int a = 0, b = 0;
int N = 4, M = 4;
// This loop runs for N time
for (int i = 0; i < N; i++) {
a = a + 10;
}
// This loop runs for M time
for (int i = 0; i < M; i++) {
b = b + 40;
}
cout << a << ' ' << b;
return 0;
}
Java
// Java program to illustrate time
// complexity for single for-loop
class GFG
{
// Driver Code
public static void main(String[] args)
{
int a = 0, b = 0;
int N = 4, M = 4;
// This loop runs for N time
for (int i = 0; i < N; i++)
{
a = a + 10;
}
// This loop runs for M time
for (int i = 0; i < M; i++)
{
b = b + 40;
}
System.out.print(a + " " + b);
}
}
// This code is contributed by rutvik_56
Python3
# Python program to illustrate time
# complexity for single for-loop
a = 0
b = 0
N = 4
M = 4
# This loop runs for N time
for i in range(N):
a = a + 10
# This loop runs for M time
for i in range(M):
b = b + 40
print(a,b)
# This code is contributed by Shubham Singh
C#
// C# program to illustrate time
// complexity for single for-loop
using System;
class GFG
{
// Driver Code
public static void Main(string[] args)
{
int a = 0, b = 0;
int N = 4, M = 4;
// This loop runs for N time
for (int i = 0; i < N; i++)
{
a = a + 10;
}
// This loop runs for M time
for (int i = 0; i < M; i++)
{
b = b + 40;
}
Console.Write(a + " " + b);
}
}
// This code is contributed by pratham76.
JavaScript
<script>
// Javascript program to illustrate time
// complexity for single for-loop
// Driver Code
let a = 0;
let b = 0;
let N = 4;
let M = 4;
// This loop runs for N time
for (let i = 0; i < N; i++) {
a = a + 10;
}
// This loop runs for M time
for (let i = 0; i < M; i++) {
b = b + 40;
}
document.write(a +' ' + b);
// This code is contributed by Shubham Singh
</script>
Explanation: The Time complexity here will be O(N + M). Loop one is a single for-loop that runs N times and calculation inside it takes O(1) time. Similarly, another loop takes M times by combining both the different loops takes by adding them
is O( N + M + 1) = O( N + M).
Example 2:
After getting familiar with the elementary operations and the single loop. Now, to find the time complexity for nested loops, assume that two loops with a different number of iterations. It can be seen that, if the outer loop runs once, the inner will run M times, giving us a series as M + M + M + M + M……….N times, this can be written as N * M. Below is the illustration for the same:
C++
// C++ program to illustrate time
// complexity for nested loop
#include <bits/stdc++.h>
using namespace std;
// Driver Code
int main()
{
int a = 0, b = 0;
int N = 4, M = 5;
// Nested loops
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
a = a + j;
// Print the current
// value of a
cout << a << ' ';
}
cout << endl;
}
return 0;
}
Java
// Java program to illustrate time
// complexity for nested loop
import java.io.*;
class GFG{
// Driver Code
public static void main (String[] args)
{
int a = 0;
int b = 0;
int N = 4;
int M = 5;
// Nested loops
for(int i = 0; i < N; i++)
{
for(int j = 0; j < M; j++)
{
a = a + j;
// Print the current
// value of a
System.out.print(a + " ");
}
System.out.println();
}
}
}
// This code is contributed by Shubham Singh
Python3
# Python program to illustrate time
# complexity for nested loop
# Driver Code
a = 0
b = 0
N = 4
M = 5
# Nested loops
for i in range(N):
for j in range(M):
a = a + j
# Print the current
# value of a
print(a, end = " ")
print()
# This code is contributed by Shubham Singh
C#
// C# program to illustrate time
// complexity for nested loop
using System;
public class GFG
{
// Driver Code
public static void Main ()
{
int a = 0;
// int b = 0;
int N = 4;
int M = 5;
// Nested loops
for(int i = 0; i < N; i++)
{
for(int j = 0; j < M; j++)
{
a = a + j;
// Print the current
// value of a
Console.Write(a + " ");
}
Console.WriteLine();
}
}
}
// This code is contributed by Shubham Singh
JavaScript
<script>
// Javascript program to illustrate time
// complexity for Nested loops
// Driver Code
let a = 0;
let b = 0;
let N = 4;
let M = 5;
// Nested loops
for (let i = 0; i < N; i++) {
for (let j = 0; j < M; j++) {
a = a + j;
// Print the current
// value of a
document.write(a +' ');
}
document.write('<br>');
}
// This code is contributed by Shubham Singh
</script>
Output0 1 3 6 10
10 11 13 16 20
20 21 23 26 30
30 31 33 36 40
Example 3:
After getting the above problems. Let's have two iterators in which, outer one runs N/2 times, and we know that the time complexity of a loop is considered as O(log N), if the iterator is divided / multiplied by a constant amount K then the time complexity is considered as O(logK N). Below is the illustration of the same:
C++
// C++ program to illustrate time
// complexity of the form O(log2 N)
#include <bits/stdc++.h>
using namespace std;
// Driver Code
int main()
{
int N = 8, k = 0;
// First loop run N/2 times
for (int i = N / 2; i <= N; i++) {
// Inner loop run log N
// times for all i
for (int j = 2; j <= N;
j = j * 2) {
// Print the value k
cout << k << ' ';
k = k + N / 2;
}
}
return 0;
}
Java
// Program to illustrate time
// complexity of the form O(log2 N)
import java.util.*;
class GFG {
// Driver Code
public static void main (String[] args)
{
int N = 8, k = 0;
// First loop run N/2 times
for (int i = N / 2; i <= N; i++) {
// Inner loop run log N
// times for all i
for (int j = 2; j <= N;
j = j * 2) {
// Print the value k
System.out.print(k + " ");
k = k + N / 2;
}
}
}
}
// This code is contributed by Shubham Singh
Python3
# Python program to illustrate time
# complexity of the form O(log2 N)
# Driver Code
N = 8
k = 0
# First loop run N/2 times
for i in range(N//2, N+1):
# Inner loop run log N
# times for all i
j = 2
while j <= N:
j = j * 2
# Print the value k
print(k, end = ' ')
k = k + N // 2
# This code is contributed by Shubham Singh
C#
// Program to illustrate time
// complexity of the form O(log2 N)
using System;
using System.Linq;
public class GFG{
// Driver Code
public static void Main ()
{
int N = 8, k = 0;
// First loop run N/2 times
for (int i = N / 2; i <= N; i++) {
// Inner loop run log N
// times for all i
for (int j = 2; j <= N;
j = j * 2) {
// Print the value k
Console.Write(k + " ");
k = k + N / 2;
}
}
}
}
// This code is contributed by Shubham Singh
JavaScript
<script>
// Javascript program to illustrate time
// complexity of the form O(log2 N)
// Driver Code
var N = 8, k = 0;
// First loop run N/2 times
for (var i = parseInt(N / 2); i <= N; i++) {
// Inner loop run log N
// times for all i
for (var j = 2; j <= N;j = j * 2) {
// Print the value k
document.write(k +" ");
k = k + parseInt(N / 2);
}
}
//This code is contributed By Shubham Singh
</script>
Output0 4 8 12 16 20 24 28 32 36 40 44 48 52 56
Example 4:
Now, let's understand the while loop and try to update the iterator as an expression. Below is the illustration for the same:
C++
// C++ program to illustrate time
// complexity while updating the
// iteration
#include <bits/stdc++.h>
using namespace std;
// Driver Code
int main()
{
int N = 18;
int i = N, a = 0;
// Iterate until i is greater
// than 0
while (i > 0) {
// Print the value of a
cout << a << ' ';
a = a + i;
// Update i
i = i / 2;
}
return 0;
}
Java
// Java program to illustrate time
// complexity while updating the
// iteration
import java.io.*;
class GFG {
// Driver Code
public static void main (String[] args)
{
int N = 18;
int i = N, a = 0;
// Iterate until i is greater
// than 0
while (i > 0) {
// Print the value of a
System.out.print(a + " ");
a = a + i;
// Update i
i = i / 2;
}
}
}
// This code is contributed by Shubham Singh
Python3
# Python program to illustrate time
# complexity while updating the
# iteration
# Driver Code
N = 18
i = N
a = 0
# Iterate until i is greater
# than 0
while (i > 0):
# Print the value of a
print(a, end = ' ')
a = a + i
# Update i
i = i // 2
# This code is contributed by Shubham Singh
C#
// Java program to illustrate time
// complexity while updating the
// iteration
using System;
public class GFG{
// Driver Code
public static void Main ()
{
int N = 18;
int i = N, a = 0;
// Iterate until i is greater
// than 0
while (i > 0) {
// Print the value of a
Console.Write(a + " ");
a = a + i;
// Update i
i = i / 2;
}
}
}
// This code is contributed by Shubham Singh
JavaScript
<script>
// javaScript program to illustrate time
// complexity while updating the
// iteration
// Driver Code
function main()
{
var N = 18;
var i = N, a = 0;
// Iterate until i is greater
// than 0
while (i > 0) {
// Print the value of a
document.write(a +" ");
a = a + i;
// Update i
i = parseInt(i / 2);
}
}
main();
// This code is contributed by Shubham Singh
</script>
Explanation: The equation for above code can be given as:
=> (N/2)K = 1 (for k iterations)
=> N = 2k (taking log on both sides)
=> k = log(N) base 2.
Therefore, the time complexity will be
T(N) = O(log N)
Example 5: Another way of finding the time complexity is converting them into an expression and use the following to get the required result. Given an expression based on the algorithm, the task is to solve and find the time complexity. This methodology is easier as it uses a basic mathematical calculation to expand a given formula to get a particular solution. Below are the two examples to understand the method.
Steps:
- Find the solution for (N - 1)th iteration/step.
- Similarly, calculate for the next step.
- Once, you get familiar with the pattern, find a solution for the Kth step.
- Find the solution for N times, and solve for obtained expression.
Below is the illustration for the same:
Let the expression be:
T(N) = 3*T(N - 1).
T(N) = 3*(3T(N-2))
T(N) = 3*3*(3T(N - 3))
For k times:
T(N) = (3^k - 1)*(3T(N - k))
For N times:
T(N) = 3^N - 1 (3T(N - N))
T(N) = 3^N - 1 *3(T(0))
T(N) = 3^N * 1
T(N) = 3^N
The third and the simplest method is to use the Master's Theorem or calculating time complexities. For finding time complexity using the Master's Theorem, please refer to this article.
For more details, please refer: Design and Analysis of Algorithms.
Similar Reads
Analysis of Algorithms Analysis of Algorithms is a fundamental aspect of computer science that involves evaluating performance of algorithms and programs. Efficiency is measured in terms of time and space.Basics on Analysis of Algorithms:Why is Analysis Important?Order of GrowthAsymptotic Analysis Worst, Average and Best
1 min read
Complete Guide On Complexity Analysis - Data Structure and Algorithms Tutorial Complexity analysis is defined as a technique to characterise the time taken by an algorithm with respect to input size (independent from the machine, language and compiler). It is used for evaluating the variations of execution time on different algorithms. What is the need for Complexity Analysis?
15+ min read
Why is Analysis of Algorithm important? Why is Performance of Algorithms Important ? There are many important things that should be taken care of, like user-friendliness, modularity, security, maintainability, etc. Why worry about performance? The answer to this is simple, we can have all the above things only if we have performance. So p
2 min read
Types of Asymptotic Notations in Complexity Analysis of Algorithms We have discussed Asymptotic Analysis, and Worst, Average, and Best Cases of Algorithms. The main idea of asymptotic analysis is to have a measure of the efficiency of algorithms that don't depend on machine-specific constants and don't require algorithms to be implemented and time taken by programs
8 min read
Worst, Average and Best Case Analysis of Algorithms In the previous post, we discussed how Asymptotic analysis overcomes the problems of the naive way of analyzing algorithms. Now let us learn about What is Worst, Average, and Best cases of an algorithm:1. Worst Case Analysis (Mostly used) In the worst-case analysis, we calculate the upper bound on t
10 min read
Asymptotic Analysis Given two algorithms for a task, how do we find out which one is better? One naive way of doing this is - to implement both the algorithms and run the two programs on your computer for different inputs and see which one takes less time. There are many problems with this approach for the analysis of
3 min read
How to Analyse Loops for Complexity Analysis of Algorithms We have discussed Asymptotic Analysis, Worst, Average and Best Cases and Asymptotic Notations in previous posts. In this post, an analysis of iterative programs with simple examples is discussed. The analysis of loops for the complexity analysis of algorithms involves finding the number of operation
15+ min read
Sample Practice Problems on Complexity Analysis of Algorithms Prerequisite: Asymptotic Analysis, Worst, Average and Best Cases, Asymptotic Notations, Analysis of loops.Problem 1: Find the complexity of the below recurrence: { 3T(n-1), if n>0,T(n) = { 1, otherwiseSolution: Let us solve using substitution.T(n) = 3T(n-1) = 3(3T(n-2)) = 32T(n-2) = 33T(n-3) ...
14 min read
Basics on Analysis of Algorithms
Why is Analysis of Algorithm important?Why is Performance of Algorithms Important ? There are many important things that should be taken care of, like user-friendliness, modularity, security, maintainability, etc. Why worry about performance? The answer to this is simple, we can have all the above things only if we have performance. So p
2 min read
Asymptotic AnalysisGiven two algorithms for a task, how do we find out which one is better? One naive way of doing this is - to implement both the algorithms and run the two programs on your computer for different inputs and see which one takes less time. There are many problems with this approach for the analysis of
3 min read
Worst, Average and Best Case Analysis of AlgorithmsIn the previous post, we discussed how Asymptotic analysis overcomes the problems of the naive way of analyzing algorithms. Now let us learn about What is Worst, Average, and Best cases of an algorithm:1. Worst Case Analysis (Mostly used) In the worst-case analysis, we calculate the upper bound on t
10 min read
Types of Asymptotic Notations in Complexity Analysis of AlgorithmsWe have discussed Asymptotic Analysis, and Worst, Average, and Best Cases of Algorithms. The main idea of asymptotic analysis is to have a measure of the efficiency of algorithms that don't depend on machine-specific constants and don't require algorithms to be implemented and time taken by programs
8 min read
How to Analyse Loops for Complexity Analysis of AlgorithmsWe have discussed Asymptotic Analysis, Worst, Average and Best Cases and Asymptotic Notations in previous posts. In this post, an analysis of iterative programs with simple examples is discussed. The analysis of loops for the complexity analysis of algorithms involves finding the number of operation
15+ min read
How to analyse Complexity of Recurrence RelationThe analysis of the complexity of a recurrence relation involves finding the asymptotic upper bound on the running time of a recursive algorithm. This is usually done by finding a closed-form expression for the number of operations performed by the algorithm as a function of the input size, and then
7 min read
Introduction to Amortized AnalysisAmortized Analysis is used for algorithms where an occasional operation is very slow, but most other operations are faster. In Amortized Analysis, we analyze a sequence of operations and guarantee a worst-case average time that is lower than the worst-case time of a particularly expensive operation.
10 min read
Asymptotic Notations
Big O Notation Tutorial - A Guide to Big O AnalysisBig O notation is a powerful tool used in computer science to describe the time complexity or space complexity of algorithms. Big-O is a way to express the upper bound of an algorithmâs time or space complexity. Describes the asymptotic behavior (order of growth of time or space in terms of input si
10 min read
Big O vs Theta Πvs Big Omega Ω Notations1. Big O notation (O): It defines an upper bound on order of growth of time taken by an algorithm or code with input size. Mathematically, if f(n) describes the running time of an algorithm; f(n) is O(g(n)) if there exist positive constant C and n0 such that,0 <= f(n) <= Cg(n) for all n >=
3 min read
Examples of Big-O analysisPrerequisite: Analysis of Algorithms | Big-O analysis In the previous article, the analysis of the algorithm using Big O asymptotic notation is discussed. In this article, some examples are discussed to illustrate the Big O time complexity notation and also learn how to compute the time complexity o
13 min read
Difference between Big O Notation and TildeIn asymptotic analysis of algorithms we often come across terms like Big O, Omega, Theta and Tilde, which describe the performance of an algorithm. Here, we will see difference between two notations: Big O and Tilde.Big O Notation (O) This notation is basically used to describe the asymptotic upper
4 min read
Analysis of Algorithms | Big-Omega ⦠NotationIn the analysis of algorithms, asymptotic notations are used to evaluate the performance of an algorithm, in its best cases and worst cases. This article will discuss Big-Omega Notation represented by a Greek letter (â¦). Table of Content What is Big-Omega ⦠Notation?Definition of Big-Omega ⦠Notatio
9 min read
Analysis of Algorithms | Î (Theta) NotationIn the analysis of algorithms, asymptotic notations are used to evaluate the performance of an algorithm by providing an exact order of growth. This article will discuss Big - Theta notations represented by a Greek letter (Î).Definition: Let g and f be the function from the set of natural numbers to
6 min read