我正在尝试查找这段代码的时间复杂度。
while(m!=4){
if(m>n)
m=m-n
else
n=n-m
}
我已经尝试过将m&n的随机值设为无限循环。我不知道如何找到它?
答案 0 :(得分:2)
仅当算法终止时,此时间复杂度才有意义。必要条件是gcd(m, n) | 4
。但这还不够。
现在可以很容易地看到,当m = 1
或n = 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 |),在最坏的情况下是线性的。