Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 低于gcd算法的时间复杂度_Algorithm_Time Complexity_Greatest Common Divisor - Fatal编程技术网

Algorithm 低于gcd算法的时间复杂度

Algorithm 低于gcd算法的时间复杂度,algorithm,time-complexity,greatest-common-divisor,Algorithm,Time Complexity,Greatest Common Divisor,我发现很难计算二进制GCD算法(也称为Stein算法)的时间复杂度,该算法被指定为O(n^2),其中n是两个数字中较大的位数。 是不是应该是O(n)? 算法如下: 1.gcd(0,v)=v,因为所有事物都除以零,而v是除以v的最大数。类似地,gcd(u,0)=u。一般不定义gcd(0,0),但设置gcd(0,0)=0很方便 2.如果u和v都是偶数,那么gcd(u,v)=2·gcd(u/2,v/2),因为2是一个公约数 3.如果u是偶数,v是奇数,那么gcd(u,v)=gcd(u/2,v),因为2

我发现很难计算二进制GCD算法(也称为Stein算法)的时间复杂度,该算法被指定为O(n^2),其中n是两个数字中较大的位数。 是不是应该是O(n)? 算法如下:

1.gcd(0,v)=v,因为所有事物都除以零,而v是除以v的最大数。类似地,gcd(u,0)=u。一般不定义gcd(0,0),但设置gcd(0,0)=0很方便

2.如果u和v都是偶数,那么gcd(u,v)=2·gcd(u/2,v/2),因为2是一个公约数

3.如果u是偶数,v是奇数,那么gcd(u,v)=gcd(u/2,v),因为2不是公约数。同样,如果u是奇数,v是偶数,那么gcd(u,v)=gcd(u,v/2)

4.如果u和v都是奇数≥ v、 那么gcd(u,v)=gcd((u− v) /2,v)。如果两者都是奇数且u
5.重复步骤2-4直到u=v,或(再重复一步)直到u=0。在任何一种情况下,GCD都是2kv,其中k是第2步中发现的2的公因数数。

Knuth第2卷有一个非常复杂的分析,它似乎证实了一个明显的猜测,即步骤数在输入位数中是最坏情况下的线性。然而,对于非常大的n,每次减法都需要按其本身的O(n)收费(例如,由于多精度运算),在这种情况下,总账单是O(n^2)

Knuth第2卷有一个非常复杂的分析,它似乎证实了一个明显的猜测,即步骤的数量在输入位数中是最坏情况下的线性。但是,对于非常大的n,每次减法都需要按O(n)计算(例如,由于多精度运算),在这种情况下,总账单是O(n^2)

它是O(n),因为在最坏的情况下,您将每个数字除以所有小于nit的除数是O(n)因为在最坏的情况下,你将每个数字除以所有小于nb的除数,但在这种情况下,它不应该像O(logn)那样表示减法,而是
n=log(max(u,v))
,而不是
n=max(u,v)
。我们不应该期望一个
logn
出现在任何地方。但在这种情况下,它不应该像O(logn)一样表示减法,而是
n=log(max(u,v))
,而不是
n=max(u,v)
。我们不应该期望
日志n
出现在任何地方。