我有一个程序,它依赖于两个大小为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))(它刚刚向我证实)但我找不到正式的证据。有人有诀窍吗?
提前致谢!
答案 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个因素导致复杂性:
总体复杂性是所有复杂性中的较大者,因此它必须与最大值
相关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)