Algorithm 欧几里德';s算法时间复杂度
我有一个关于欧几里德求最大公约数的算法的问题 gcd(p,q),其中p>q且q为n位整数 我试图对算法进行时间复杂度分析(如上所述,输入为n位)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
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