该代码可能会无限循环的时间复杂度是多少?

时间:2019-02-24 07:41:53

标签: algorithm time-complexity infinite-loop

我正在尝试查找这段代码的时间复杂度。

 while(m!=4){
        if(m>n)
               m=m-n
        else
               n=n-m
    }

我已经尝试过将m&n的随机值设为无限循环。我不知道如何找到它?

2 个答案:

答案 0 :(得分:2)

仅当算法终止时,此时间复杂度才有意义。必要条件是gcd(m, n) | 4。但这还不够。

现在可以很容易地看到,当m = 1n = 1出现最坏情况(降幅最小)时,复杂度为O(max(m, n))

答案 1 :(得分:0)

您的代码将几乎对每个m和n进入无限循环,因为对于大多数m和n,其中一个将达到0,并且它将变为无限循环(n = n-0)。同样,m必须大于4,否则循环将继续进行,直到m或n再次变为0(相同的情况)。终止循环的唯一方法是当m-n k = 4时,其中k为整数。或者,当m大于n时,m-(n-m k)=4。在这种情况下,时间复杂度将是O(| m-n |),在最坏的情况下是线性的。