Home > Enterprise >  Identifying time complexity for a loop
Identifying time complexity for a loop

Time:09-27

I was hoping to have some help in identifying the time complexity of the while loop below. I am trying to solve a problem in o(n) time complexity and was unsure whether this loop would satisfy this condition.

If the loop is not o(n) time complexity would it be o(n^2)?

Thank you :)

int a = 0;
int b = a   1;
while (a < n) {
    b  ;
    if (b == n) {
        a  ;
        b = a   1;
    }
}

CodePudding user response:

(I assume here that the assignment in the if branch is b = a; instead of b = a 1;, otherwise, there is an infinite loop.)

Your algorithm generates all the couples (a, b) such that a < n, b < n and b > a. There are exactly (n - 1) (n - 2) ... 1 couples that satisfy this constraint. (n - 1) (n - 2) ... 1 = (n - 1) * (n - 2) / 2 which gives a complexity in O(n²).

You might be mislead by the fact that there is a single loop in your program which might give the impression that the complexity is O(n), but your algorithm can be rewritten as follows:

int a = 0;
int b;
while (a < n) {
    b = a   1;
    while (b < n) {
       b   ;
    }
    a  ;
}

This makes it easier to see that the complexity is indeed O(n²).

CodePudding user response:

(n)   (n-1)   (n-2)   ...   1 = n*(n-1)/2

So you have an O(n^2) loop.

CodePudding user response:

This is an infinite loop for all values of n in range [1, infinity) because when a will result in value of a equal to n - 1, the value of b will reset to a 1 , which is nothing but n [a 1 => n - 1 1 => n] and in next iteration b will be incremented by 1 and then, theoretically, b == n will never be true.

I am trying to solve a problem in o(n) time complexity....

It would be better if you share some details about the algorithm that you are trying to implement to solve the problem.

  • Related