程序的指数复杂性

时间:2014-02-18 15:23:50

标签: algorithm complexity-theory

我有一个程序,它依赖于两个大小为m和n的条目。如果T(m,n)是问题的运行时间,则遵循:

T(M,N)= T(M-1,N-1)+ T(M-1,N)+ T(M,N-1)+ C

对于给定的常数C。

我可以证明时间复杂度是欧米茄(2 ^ min(m,n))。然而,它似乎是复杂的欧米茄(2 ^ max(m,n))(它刚刚向我证实)但我找不到正式的证据。有人有诀窍吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

首先,您应该定义,对于x的所有值,T(0,x)= T(x,0)= 0以使递归停止 - 或者至少T(0,x)= T(x ,0)= C.

其次,“时间复杂度在欧米茄(2 ^ min(m,n))”显然必定是错误的。设m = 10000,n = 1。现在试着向我证明复杂性与m = 1和n = 1相同。 T(m-1,n-1)和T(m,n-1)部分很快消失,但你仍然需要走T(m-1,n)部分。

第三,这种观察直接导致2 ^ max(m,n)。尝试找出m和n的一些低值的递归步数。然后尝试根据m和n构成步数的公式。 (提示:斐波那契)。当你有这个公式时,你已经完成了。

答案 1 :(得分:0)

从我的头顶:
我假设当达到T(0,x)或T(x,0)时T(m,n)的递归停止。

您有3个因素导致复杂性:

  1. 因子1:T(m-1,n-1)减小m和n,因此它的长度直到m或n变为0是min(m,n)步(见下面的注释)
  2. 因子2:T(m-1,n)仅减小m,因此直到m = 0的长度为m步。
  3. 因子3:T(m,n-1)与上述相同,但直到n = 0才是n步。
  4. 总体复杂性是所有复杂性中的较大者,因此它必须与最大值

    相关
    max( min(m,n) steps, m steps, n steps) = max(m,n)
    rather than min(m,n).
    

    我想你可以填写细节。常数C没有贡献,或更精确地贡献O(1),这是所有复杂性中最低的。

    关于第1项的注意事项:该因子也有m-1的分支,直到0和n-1到0,所以严格来说它的复杂性也是max(m,n)