欧几里德的算法时间复杂度

时间:2017-03-29 02:23:23

标签: algorithm time-complexity

我对欧几里德算法找到最大公约数有疑问。

gcd(p,q)其中p> q和q是n位整数。

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

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

我已经明白,u + vu代表vp的初始值的两个数字q的总和减少了系数至少为1/2

现在让m为此算法的迭代次数。 我们希望找到m

这样的最小整数(1/2)^m(u + v) <= 1

这是我的问题。 我得到每次迭代中两个数字的总和是(1/2)^m(p + q)的上限。但是,当这个数量为m时,我真的不明白为什么达到最大<= 1

对于n位q,答案是O(n),但这就是我被卡住的地方。

请帮助!!

1 个答案:

答案 0 :(得分:1)

想象一下,我们有p和q,其中p> Q值。现在,有两种情况:

1)p&gt; = 2 * q:在这种情况下,p将在mod之后减少到小于q的值,因此总和将至多为之前的2/3。

2)q&lt; p&lt; 2 * q:在这种情况下,mod操作就像从p中减去q一样,所以总和最多也是之前的2/3。

因此,在每一步中,这笔金额将是最后一笔金额的2/3。由于你的数字是n位,所以总和的大小是2 ^ {n + 1};因此,对于log 2 ^ {n + 1}(基本3/2)步,实际上是O(n),总和将为0.