欧几里德算法的时间复杂度减法
Time Complexity of Euclid Algorithm by Subtraction
int gcd(int a, int b)
{
while(a!=b)
{
if(a > b)
a = a - b;
else
b = b - a;
}
return a;
}
这个算法的时间复杂度是多少?有人可以提供详细的解释吗?
对于欧几里德减法算法,a
和b
是正整数。
最坏的情况是 a = n
和 b = 1
。然后,需要n - 1
步计算出GCD。因此,时间复杂度为 O(max(a,b)) 或 O(n)(如果它是根据迭代次数计算的)。
顺便说一下,您还应该修复您的函数,以便它验证 a
和 b
是否真的是正整数。或者更好的是,您可以将 return 和参数类型更改为 unsigned long
或 unsigned int
或类似的类型,并且按照@templatetypedef 的建议,处理 a = 0
或 [=20 的情况=] 分开。
int gcd(int a, int b)
{
while(a!=b)
{
if(a > b)
a = a - b;
else
b = b - a;
}
return a;
}
这个算法的时间复杂度是多少?有人可以提供详细的解释吗?
对于欧几里德减法算法,a
和b
是正整数。
最坏的情况是 a = n
和 b = 1
。然后,需要n - 1
步计算出GCD。因此,时间复杂度为 O(max(a,b)) 或 O(n)(如果它是根据迭代次数计算的)。
顺便说一下,您还应该修复您的函数,以便它验证 a
和 b
是否真的是正整数。或者更好的是,您可以将 return 和参数类型更改为 unsigned long
或 unsigned int
或类似的类型,并且按照@templatetypedef 的建议,处理 a = 0
或 [=20 的情况=] 分开。