我在Interview Bit上解决了时间复杂度问题,如下图所示。
给出的答案是Θ(theta)(logn)
,我无法掌握登录术语在此计划的时间复杂性中如何到达。
有人可以解释一下logn的答案是什么?
答案 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_1
和n_1
开始,m_1 < n_1
。
在每一步,我们都会n_1 % m_1
< m_1
,然后对m_2 = n_1 % m_1
和n_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)
步骤终止。