相互递归分析

时间:2016-04-24 01:31:05

标签: algorithm performance big-o

我试图分析这些功能,但我有点迷失了。因此,对于@Scope t(n) = c

时的函数f

所以,如果n < 1^-5我得到n >= 1^5,其中t2是函数h的时间分析,但我对扩展它感到困惑应该是

t(n) = c2 + t( n / 2 ) + t2( n / 2)

或者我应该扩展t2?

这是我想要分析的代码。

t(n) = ( t(n / 2) + t2( n / 2) ) * c2 + c

2 个答案:

答案 0 :(得分:2)

T 1 (n)= T 1 (n / 2)+ T 2 (n / 2)+ c1

T 2 (n)= T 1 (n / 2)+ T 2 (n / 2)+ c2

所以我们有

  • T 1 (n)= O(T 2 (n))
  • T 1 (n)= 2T 1 (n / 2)+ c1

因为c1 = O(n log 2 2 )主定理意味着

T(n) = O(n)

答案 1 :(得分:1)

即使我们在这段代码中调用了两个不同的函数,但是有一些东西可以让你轻松找到这种递归的复杂性。

发生的事情是,在顶层,如果您要输入f(),则表示您正在评估x,然后调用两个不同的功能 - 本身和g()。即使您首先输入g()函数,也会发生同样的事情,即g()调用自身和f()

因为,树的每个级别x的值都减半,所以此树上的级别数将是 Log 2 (n)。此外,每个节点有2个孩子即。 f(x / 2)和g(x / 2)。

这是一个长度为Log 2 (n)的完整二叉树。

在每个节点上完成的工作是不变的 - 如果节点代表对f()的调用,则执行2 * y * z,这是常量。如果节点代表对g()的调用,则执行y*y + z*z,这也是常量。

因此,我们需要做的是,找到长度为Log 2 (n)的竞争二进制树中的节点总数,我们就有了它们的复杂性。

  • 高度 h 的完美二叉树总共有2个 h + 1 - 1个节点。
  • 在这种情况下,它将是2 Log 2 (n)+ 1 - 1个节点。
  • 此外, Log a b = b(By property of logarithms 1
  • 因此,复杂度为O(2 Log 2 (n))= O(n)。

1 查看&#34;取消指数中的第一个属性&#34;部分。