gcd的时间复杂度如何是Θ(logn)?

时间:2017-02-14 12:05:35

标签: time-complexity big-o asymptotic-complexity greatest-common-divisor big-theta

我在Interview Bit上解决了时间复杂度问题,如下图所示。 enter image description here

给出的答案是Θ(theta)(logn),我无法掌握登录术语在此计划的时间复杂性中如何到达。

有人可以解释一下logn的答案是什么?

2 个答案:

答案 0 :(得分:1)

定理给出任何x,gcd(n,m),其中n< fib(x)是递归的,称为等于或小于x次。

注意:fib(x)是斐波那契(x),其中fib(x)= fib(x-1)+ fib(x-2)

<强>证明

<强>基

每个n&lt; = fib(1),gcd(n,m)只有gcd(1,m)递归一次

归纳步骤

假设定理对于小于x的每个数都是有效的,这意味着:

calls(gcd(n, m)) <= x for every n <= fib(x)

考虑n其中n <= fib(x + 1)

如果m> FIB(x)的

   calls(gcd(n, m))
=  calls(gcd(m, (n-m))) + 1
=  calls(gcd(n-m, m%(n-m))) + 2  because n - m <= fib(x-1)
<= x - 1 + 2
=  x + 1

如果m&lt; = fib(x)

   calls(gcd(n, m))
=  calls(gcd(m, (n%m))) + 1  because m <= fib(x)
<= x + 1

因此该定理也适用于x + 1,作为数学归纳,该定理适用于每个x。

<强>结论

gcd(n,m)是Θ(反向纤维),其为Θ(logn)

答案 1 :(得分:0)

该算法生成整数(m, n)对的递减序列。我们可以尝试证明这种序列衰减得足够快。

假设我们从m_1n_1开始,m_1 < n_1

在每一步,我们都会n_1 % m_1 < m_1,然后对m_2 = n_1 % m_1n_2 = m_1对进行递归重复。

现在,让n_1 % m_1 = m_1 - p代表某些p 0 < p < m_1。 我们有max(m_2, n_2) = m_1 - p

让我们采取另一个步骤(m_2, n_2) -> (m_3, n_3),我们可以很容易地看到max(m_3, n_3) < p,但显然max(m_3, n_3) < m_1 - p也是如此,因为序列严格减少。

所以我们可以写max(m_3, n_3) < min(m_1 - p, p),其中min(m_1 - p, p) = m_1 / 2。该结果表明序列在几何上减少,因此算法必须以最多log_2(m_1)步骤终止。