Time complexity 减法欧几里德算法的时间复杂度
这个算法的时间复杂度是多少?有人能提供详细的解释吗?对于减法欧几里德算法,Time complexity 减法欧几里德算法的时间复杂度,time-complexity,euclidean-algorithm,Time Complexity,Euclidean Algorithm,这个算法的时间复杂度是多少?有人能提供详细的解释吗?对于减法欧几里德算法,a和b是正整数 最坏的情况是a=n和b=1。然后,将采取n-1步骤来计算GCD。因此,时间复杂度为O(max(a,b))或O(n)(如果它是根据迭代次数计算的) 顺便说一下,您还应该修复函数,以便它验证a和b是否真的是正整数。或者更好的是,您可以将返回和参数类型更改为无符号long或无符号int或类似类型,并按照@templatetypedef的建议,分别处理a=0或b=0的情况。如果a=1和b=0,此算法永远不会终止。@
a
和b
是正整数
最坏的情况是a=n
和b=1
。然后,将采取n-1
步骤来计算GCD。因此,时间复杂度为O(max(a,b))或O(n)(如果它是根据迭代次数计算的)
顺便说一下,您还应该修复函数,以便它验证
a
和b
是否真的是正整数。或者更好的是,您可以将返回和参数类型更改为无符号long
或无符号int
或类似类型,并按照@templatetypedef的建议,分别处理a=0
或b=0
的情况。如果a=1和b=0,此算法永远不会终止。@templatetypedef nope,对于减法欧几里德算法,a
和b
必须是正整数。@Anatolii修改算法以处理其中一个输入为零不是很简单吗?@templatetypedef当然,你是对的,但我不知道OP有什么确切的要求。至少,OP可以使用无符号
类型作为参数和函数返回类型。
int gcd(int a, int b)
{
while(a!=b)
{
if(a > b)
a = a - b;
else
b = b - a;
}
return a;
}