字符串子序列递归的时间复杂度

时间:2016-01-15 00:57:06

标签: string algorithm recursion big-o time-complexity

如何计算下面算法的时间复杂度?有人可以简单地向我解释一下:

equal_ids==true

2 个答案:

答案 0 :(得分:3)

假设 m prefix的长度,而 n remaining的长度。然后复杂性由

给出

T(m,n,k)=Θ(m + n)+ T(m + 1,n - 1,k - 1)+ T(m,n - 1,k)

Θ(m + n)术语源于

prefix + remaining.charAt(0), remaining.substring(1)

,通常需要分别创建两个长度约为 m n 的字符串(这可能因各种实现而异)。

除此之外,它很难解决(至少对我来说),除了一些非常简单的界限。例如,很明显,复杂性至少是前缀长度的最小值和 k 的指数,因为

T(m,n,k)≥2T(m,n - 1,k - 1)↠T(m,n,k)=Ω(2 min(n,k)功能

答案 1 :(得分:0)

假设m是prefix的长度,n是remaining的长度。然后复杂性由

给出
  

T(m,n,k)= 1 + n + 1 + T(m + 1,n - 1,k - 1)+ T(m,n - 1,k)

显然,当n = 0或k = 0时,函数停止。所以,

  

T(r,n,0)= 1 + r

     

T(m,0,k)= 1 + 1 + 1 = 3

改革方程式1,我们得到了

  

T(m,n,k) - T(m,n - 1,k)= 2 + n + T(m + 1,n - 1,k - 1)

在等式1中将n替换为n-1

  

T(m,n - 1,k) - T(m,n - 2,k)= 2 +(n - 1)+ T(m + 1,n - 2,k - 1)

     

......继续......

     

T(m,1,k) - T(m,0,k)= 2 +(1)+ T(m + 1,0,k - 1)

总结一下

  

T(m,n,k) - T(m,0,k)= 2(n)+(n-1)(n)/ 2 + {T上从0到n - 1的总和( m + 1,a,k - 1)}

改革

  

T(m,n,k)= n 2 / 2 + 3n / 2 + 3 + {T的从0到n - 1的总和(m + 1,a,k - 1)}

我想我们可以通过使用最后一个方程求解求和得到答案,方程的主导因子就像n k + 1