我试图分析这些功能,但我有点迷失了。因此,对于@Scope
t(n) = c
所以,如果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
答案 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
所以我们有
因为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)的竞争二进制树中的节点总数,我们就有了它们的复杂性。
1 查看&#34;取消指数中的第一个属性&#34;部分。