Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.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 欧几里德';s算法时间复杂度_Algorithm_Time Complexity - Fatal编程技术网

Algorithm 欧几里德';s算法时间复杂度

Algorithm 欧几里德';s算法时间复杂度,algorithm,time-complexity,Algorithm,Time Complexity,我有一个关于欧几里德求最大公约数的算法的问题 gcd(p,q),其中p>q且q为n位整数 我试图对算法进行时间复杂度分析(如上所述,输入为n位) gcd(p,q) 如果(p==q) 返回q if(pq。现在有两种情况: 1) p>=2*q:在这种情况下,在mod之后p将减少到小于q的值,因此总和最多是之前的2/3 2) q。我做了一些编辑。它是O(log(min a,b)),这可能有助于复制。 gcd(p,q) if (p == q) return q if (p

我有一个关于欧几里德求最大公约数的算法的问题

gcd(p,q),其中p>q且q为n位整数

我试图对算法进行时间复杂度分析(如上所述,输入为n位)

gcd(p,q)
如果(p==q)
返回q
if(p
我已经了解到,两个数字的总和,
u+v
,其中
u
v
代表
p
q
的初始值,至少减少了
1/2

现在让
m
为该算法的迭代次数。
我们想找到最小的整数
m
,这样
(1/2)^m(u+v)假设我们有p和q,其中p>q。现在有两种情况:

1) p>=2*q:在这种情况下,在mod之后p将减少到小于q的值,因此总和最多是之前的2/3

2) q
因此,在每个步骤中,该总和将是最后一个总和的2/3。因为你的数字是n位,所以和的大小是2^{n+1};因此,对于log2^{n+1}(基3/2)步骤,实际上是O(n),总和将是0。

p+q
在一个步骤中减半是不正确的。考虑<代码> p=199 < /代码>和<代码> q=100 < /代码>。我做了一些编辑。它是O(log(min a,b)),这可能有助于复制。
gcd(p,q)
    if (p == q)
       return q
    if (p < q)
       gcd(q,p)
    while (q != 0)
       temp = p % q
       p = q
       q = temp
    return p