这是我的程序:
for(m!=n){
if(m>n)
m=m-n;
else
n=n-m;
}
如果我取m = 16且n = 2,则循环执行7次。 如果我取m = 16且n = 12,则循环执行3次。 如何为该程序提供更准确的时间复杂度,以及在我们有两个输入的情况下,这种算法的时间复杂度计算过程是什么?
答案 0 :(得分:4)
假设m,n > 0
,时间复杂度为O(max(n,m))
(或等效为O(n+m)
)。
原因是:
n
减少或m
减少,因此迭代次数不能超过n + m
(上限)。n=1
,m=k
(对称地,n=k
,m=1
),这给了我们精确的k
迭代(下界)。答案 1 :(得分:0)
假设您的m和n遵循一定的约束并且循环不会进入无限循环。即m>0
和n>0
或m!=1
和n=0
If m>=n
if m%n==0
,然后循环将执行m / n-1次
else if m%n!=0
,然后循环将执行ceil(m / n)次。
If m<n
if n%m==0
,然后循环将执行m / n-1次
else if n%m!=0
,然后循环将执行ceil(m / n)次。
无论哪种情况,复杂度分别为0(m/n)
或0(n/m)
,分别等于0(m)
或0(n)
。
答案 2 :(得分:0)
时间复杂度尚无明确答案。迭代次数取决于m和n。
因此,如果您保持n不变并且不断增加m,您将得到一个循环模式。
下图显示了n = 2000和m在1到10000之间的迭代次数
答案 3 :(得分:0)
您无法证明循环将结束。
特别是如果m或n中的任何一个为零,它将永远循环。
所以时间复杂度不确定。
添加约束。
希望获得帮助。