Search code examples
time-complexitybig-ocomplexity-theory

Determine time complexity of arithmetic progression


I am novice in analysing time complexity.some one can help me with the time complexity of below algorithm?

public void test(int n)
{
  for(int i=1;i<=n;i=i+2)
    {
     for(int j=1;j<=i;j++)
     {}
    }
}

outer loop will run n/2 times.Inner loop will run (1+3+5+7+9...n) times. what will be time complexity of inner loop and how can we calculate sum of such arithmitic progression?


Solution

  • Assume n is odd. Then n = 2k + 1 for some k. Now

      1 + 3 + … + n
    = 1 + 3 + … + 2k+1
    = (1 + 3 + … + 2k + 1) + (1 + 1 + … + 1) - (1 + 1 + … + 1)
    = (1 + 1) + (3 + 1) + … + (2k + 1 + 1) - (1 + 1 + … + 1)
    = 2 + 4 + … + 2k+2 - (1 + 1 + … + 1)
    = 2(1 + 2 + … + k+1) - (1 + 1 + … + 1)
    = 2(k+1)(k+2)/2 - (k+1)
    = k^2 + 3k + 2 - k - 1
    = k^2 + 2k + 1
    = (k+1)^2
    = (n+1)^2/4
    

    We can test a few terms...

    n    f(n)    Series Sum
    1    1       1 = 1
    3    4       1 + 3 = 4
    5    9       1 + 3 + 5 = 9
    7    16      1 + 4 + 5 + 7 = 16
    

    Looks like it checks out.