无法弄清楚这种复发的复杂性

时间:2013-01-20 11:05:21

标签: algorithm recursion complexity-theory asymptotic-complexity master-theorem

我对硕士定理有点兴奋,我试图通过递归求解2个大小为n的子问题并结合解决方案,找出解决大小n-1问题的算法的运行时间在不断的时间 所以公式是:
T(N) = 2T(N - 1) + O(1)
但我不确定如何制定主定理的条件 我的意思是我们没有T(N/b)因此b的主定理公式是b=N/(N-1)吗? 如果是,那么a > b^k k=0显然是O(N^z),而z=log2 (N/N-1)的基础为{{1}},我怎么能理解这个?假设到目前为止我是对的?

4 个答案:

答案 0 :(得分:3)

啊,提示就足够了。解决方案实际上非常简单。 z变换双方,对术语进行分组,然后反向z变换以获得解决方案。

首先,将问题视为

    x[n] = a x[n-1] + c

将z变换应用于双方(关于ROC有一些技术性,但暂时忽略它)

    X(z) = (a X(z) / z) + (c z / (z-1))

求解X(z)得到

    X(z) = c z^2 / [(z - 1) * (z-a)]

现在观察到这个公式可以重写为:

    X(z) = r z / (z-1) + s z / (z-a)

其中r = c /(1-a)且s = -a c /(1-a)

此外,请注意

    X(z) = P(z) + Q(z)

其中P(z)= rz /(z-1)= r /(1 - (1 / z)),Q(z)= sz /(za)= s /(1 - a(1 / Z))

应用逆z变换得到:

    p[n] = r u[n] 

    q[n] = s exp(log(a)n) u[n]

其中log表示自然对数,u [n]是单位(Heaviside)阶跃函数(即对于n> = 0,u [n] = 1,对于n <0),u [n] = 0。

最后,通过z变换的线性:

    x[n] = (r + s exp(log(a) n))u[n]

其中r和s如上所定义。

重新回到原来的问题,

    T(n) = a T(n-1) + c

然后

    T(n) = (c/(a-1))(-1+a exp(log(a) n))u[n]

其中exp(x)= e ^ x,log(x)是x的自然对数,u [n]是单位步长函数。

这告诉你什么?

除非我犯了错误,否则T会随着指数增长而增长。在合理的假设下,这实际上是指数增加的函数a> 1。 1.指数由a(更具体地说,a的自然对数)控制。

再简化一次,请注意exp(log(a)n)= exp(log(a))^ n = a ^ n:

    T(n) = (c/(a-1))(-1+a^(n+1))u[n]

所以O(a ^ n)用大O表示法。

现在这是一个简单的方法:

把T(0)= 1

    T(n) = a T(n-1) + c

    T(1) = a * T(0) + c = a + c
    T(2) = a * T(1) + c = a*a + a * c + c
    T(3) = a * T(2) + c = a*a*a + a * a * c + a * c + c
    ....

请注意,这会创建一个模式。具体是:

    T(n) = sum(a^j c^(n-j), j=0,...,n)

把c = 1给出

    T(n) = sum(a^j, j=0,...,n)

这是几何系列,其评估结果为:

    T(n) = (1-a^(n+1))/(1-a)
         = (1/(1-a)) - (1/(1-a)) a^n
         = (1/(a-1))(-1 + a^(n+1))

表示n> = 0。

注意,使用z变换方法,此公式与上面给出的c = 1相同。再次,O(a ^ n)。

答案 1 :(得分:1)

甚至不要考虑师父的定理。当你获得主要定理时,你只能使用Masther定理。 1的一般形式为T(n)= aT(n / b)+ f(n)。

相反,想一想这样。您有一个递归调用,在每次递归调用时将输入n的大小递减1。并且在每次递归调用时,成本都是常数O(1)。输入大小将减少,直到达到1.然后,您将累计用于进行递归调用的所有成本。 他们有几个人? ñ。所以这需要O(2 ^ n)。

答案 2 :(得分:0)

看起来你无法根据主定理来解决这个问题。

一个好的开始是绘制递归树以理解模式,然后用替换方法证明它。您也可以多次展开公式,看看它的位置。

另请参阅此问题,该问题解决了2个子问题,而不是aTime bound for recursive algorithm with constant combination time

答案 3 :(得分:0)

可能你会想到这样吗

n = 1, T(1) = 1
n = 2, T(2) = 2
n = 3, T(3) = 4
n = 4, T(4) = 8
n = 5, T(5) = 16

很容易看出这是一个几何系列1 + 2+ 4+ 8 + 16...,其总和是     第一学期(ratio^n - 1)/(ratio - 1)。对于这个系列,它是

1 * (2^n - 1)/(2 - 1) = 2^n - 1.

这里的主导词是2^n,因此该函数属于Theta(2^n)。您可以通过执行lim(n->inf) [2^n / (2^n - 1)] = +ve constant.

来验证它

因此该函数属于Big Theta (2^n)