Search code examples
time-complexitycode-complexity

What would be complexity of this recursive algorithm


How to calculate the complexity of a bit complicated recursive algorithm like this in this case what would be the complexity of something(0,n)

void something(int b, int e) {
     if (b >= e) return;
     int a = 0;
     for(int i=b; i < e; i++)
     a++;
     int k = (b+e)/2;
     something(b, k);
     something(k+1, e);
     }

I tried to analyze this algorithm and think it has complexity is n*ln(n) but still can't get a formal proof.


Solution

  • Initially, loop will run for (e-b) times and it will call itself 2 times, but reducing the size of loop by half

    So, ((e-b)/2) will run for 2 iteration; once by (b,(b+e)/2) and again by ((b+e)/2+1,e)

    Like wise both iterations will again call themself 2 times, but reducing the iteration length by half.

    So `((e-b)/4) will run 4 times, and so on.

    The height of the recursion tree will be log(b-e), (each node is having 2 children)

    So, time complexity = (b-e) + 2*((b-e)/2) + 4*((b-e)/4) + .....(log(b-e) times)

    this expression evaluates to (b-e)*log(b-e)

    therefore, time complexity = O(nlogn)