我对欧几里德算法找到最大公约数有疑问。
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 + v
和u
代表v
和p
的初始值的两个数字q
的总和减少了系数至少为1/2
。
现在让m
为此算法的迭代次数。
我们希望找到m
(1/2)^m(u + v) <= 1
这是我的问题。
我得到每次迭代中两个数字的总和是(1/2)^m(p + q)
的上限。但是,当这个数量为m
时,我真的不明白为什么达到最大<= 1
。
对于n位q
,答案是O(n),但这就是我被卡住的地方。
请帮助!!
答案 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.