该算法更精确的时间复杂度是什么?

时间:2018-10-17 06:50:31

标签: c algorithm time-complexity big-o

这是我的程序:

 for(m!=n){
   if(m>n)
     m=m-n;
   else 
     n=n-m; 
 }

如果我取m = 16且n = 2,则循环执行7次。 如果我取m = 16且n = 12,则循环执行3次。 如何为该程序提供更准确的时间复杂度,以及在我们有两个输入的情况下,这种算法的时间复杂度计算过程是什么?

4 个答案:

答案 0 :(得分:4)

假设m,n > 0,时间复杂度为O(max(n,m))(或等效为O(n+m))。

原因是:

  • 在每次迭代中,n减少或m减少,因此迭代次数不能超过n + m(上限)。
  • 我们可以介绍最坏情况的场景n=1m=k(对称地,n=km=1),这给了我们精确的k迭代(下界)。

答案 1 :(得分:0)

假设您的m和n遵循一定的约束并且循环不会进入无限循环。即m>0n>0m!=1n=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。

  1. 如果m == n,则循环以1步退出。
  2. 如果m == 1且n == 100,则循环将执行100步。

因此,如果您保持n不变并且不断增加m,您将得到一个循环模式。

下图显示了n = 2000和m在1到10000之间的迭代次数

enter image description here

答案 3 :(得分:0)

您无法证明循环将结束。

特别是如果m或n中的任何一个为零,它将永远循环。

所以时间复杂度不确定。

添加约束。

希望获得帮助。