算法导论 — 4.5 用主方法求解递归式

笔记

利用主定理可以对形如 T ( n ) = a T ( n / b ) + f ( n ) T(n) = aT(n/b) + f(n) T(n)=aT(n/b)+f(n)的递归式直接求解。下面先给出主定理的描述。
  令 a ≥ 1 a ≥ 1 a1 b > 1 b > 1 b>1是常数, f ( n ) f(n) f(n)是一个函数, T ( n ) T(n) T(n)是定义在非负整数上的递归式:
       T ( n ) = a T ( n / b ) + f ( n ) T(n) = aT(n/b) + f(n) T(n)=aT(n/b)+f(n)
  其中我们将 n / b n/b n/b解释为 ⌊ n / b ⌋ ⌊n/b⌋ n/b ⌈ n / b ⌉ ⌈n/b⌉ n/b。那么 T ( n ) T(n) T(n)有如下渐近界:
   若对某个常数 ε > 0 ε > 0 ε>0 f ( n ) = O ( n l o g b a − ε ) f(n)=O(n^{{\rm log}_{b}a-ε}) f(n)=O(nlogbaε),则 T ( n ) = Θ ( n l o g b a ) T(n)=Θ(n^{{\rm log}_{b}a}) T(n)=Θ(nlogba)
   若 f ( n ) = Θ ( n l o g b a ) f(n)=Θ(n^{{\rm log}_{b}a}) f(n)=Θ(nlogba),则 T ( n ) = Θ ( n l o g b a l g n ) T(n)=Θ(n^{{\rm log}_{b}a}{\rm lg}n) T(n)=Θ(nlogbalgn)
   若对某个常数 ε > 0 ε > 0 ε>0 f ( n ) = Ω ( n l o g b a + ε ) f(n)=Ω(n^{{\rm log}_{b}a+ε}) f(n)=Ω(nlogba+ε),且对某个常数 c < 1 c < 1 c<1和所有足够大的 n n n a f ( n / b ) ≤ c f ( n ) af(n/b) ≤ cf(n) af(n/b)cf(n),则 T ( n ) = Θ ( f ( n ) ) T(n)=Θ(f(n)) T(n)=Θ(f(n))
  直观上来看,主定理是将函数 f ( n ) f(n) f(n) n l o g b a n^{{\rm log}_{b}a} nlogba进行比较。若 n l o g b a n^{{\rm log}_{b}a} nlogba渐近更大,则为情况1,解为 T ( n ) = Θ ( n l o g b a ) T(n)=Θ(n^{{\rm log}_{b}a}) T(n)=Θ(nlogba);若 f ( n ) f(n) f(n)渐近更大,则有可能为情况3,解为 T ( n ) = Θ ( f ( n ) ) T(n)=Θ(f(n)) T(n)=Θ(f(n));若 f ( n ) f(n) f(n) n l o g b a n^{{\rm log}_{b}a} nlogba渐近相等,则为情况2,解为 T ( n ) = Θ ( n l o g b a l g n ) T(n)=Θ(n^{{\rm log}_{b}a}{\rm lg}n) T(n)=Θ(nlogbalgn)
  需要注意的是,这里讲的“渐近大于或渐近小于”指的是“多项式意义上的渐近大于或渐近小于”。对于况1,并不是满足 f ( n ) f(n) f(n)渐近小于 n l o g b a n^{{\rm log}_{b}a} nlogba就够了,而是在“渐近小于”的基础上还要相差一个因子 n ε n^ε nε,即 f ( n ) = O ( n l o g b a − ε ) f(n)=O(n^{{\rm log}_{b}a-ε}) f(n)=O(nlogbaε),其中 ε ε ε是一个大于 0 0 0的常数。而在第3种情况中,也并不是满足 f ( n ) f(n) f(n)渐近大于 n l o g b a n^{{\rm log}_{b}a} nlogba就够了,而是在“渐近大于”的基础上还要相差一个因子 n ε n^ε nε,即 f ( n ) = Ω ( n l o g b a + ε ) f(n)=Ω(n^{{\rm log}_{b}a+ε}) f(n)=Ω(nlogba+ε)
  另外要注意的是,主定理的3种情况并未覆盖 f ( n ) f(n) f(n)的所有可能性。存在一些函数 f ( n ) f(n) f(n)并不属于3种情况中的任何一种,这时就不能应用主方法来求解递归式。
  下面通过例子来说明主方法的应用。
  先看递归式 T ( n ) = 9 T ( n / 3 ) + n T(n)=9T(n/3)+n T(n)=9T(n/3)+n。套用主定理,有 a = 9 , b = 3 a = 9, b = 3 a=9,b=3并且 f ( n ) = n f(n) = n f(n)=n,于是有 n l o g b a = n l o g 3 9 = n 2 n^{{\rm log}_{b}a}=n^{{\rm log}_{3}9}=n^2 nlogba=nlog39=n2。由于 f ( n ) = O ( n l o g b a − ε ) f(n)=O(n^{{\rm log}_{b}a-ε}) f(n)=O(nlogbaε),其中 ε = 1 ε = 1 ε=1,所以可以应用主定理的情况1,从而得到解 T ( n ) = Θ ( n l o g b a ) = Θ ( n 2 ) T(n)=Θ(n^{{\rm log}_{b}a})=Θ(n^2) T(n)=Θ(nlogba)=Θ(n2)
  再看一个递归式 T ( n ) = T ( 2 n / 3 ) + 1 T(n)=T(2n/3)+1 T(n)=T(2n/3)+1。套用主定理,有 a = 1 , b = 3 / 2 a = 1, b = 3/2 a=1,b=3/2并且 f ( n ) = 1 f(n) = 1 f(n)=1,于是有 n l o g b a = n l o g 3 / 2 1 = n 0 = 1 n^{{\rm log}_{b}a}=n^{{\rm log}_{3/2}1}=n^0=1 nlogba=nlog3/21=n0=1。由于 f ( n ) = Θ ( n l o g b a ) = Θ ( 1 ) f(n)=Θ(n^{{\rm log}_{b}a})=Θ(1) f(n)=Θ(nlogba)=Θ(1),所以可以应用主定理的情况2,从而得到解 T ( n ) = Θ ( n l o g b a l g n ) = Θ ( l g n ) T(n)=Θ(n^{{\rm log}_{b}a}{\rm lg}n)=Θ({\rm lg}n) T(n)=Θ(nlogbalgn)=Θ(lgn)
  再看递归式 T ( n ) = 3 T ( n / 4 ) + n l g n T(n)=3T(n/4)+n{\rm lg}n T(n)=3T(n/4)+nlgn。套用主定理,有 a = 3 , b = 4 a = 3, b = 4 a=3,b=4并且 f ( n ) = n l g n f(n) = n{\rm lg}n f(n)=nlgn,于是有 n l o g b a = n l o g 4 3 = O ( n 0.793 ) n^{{\rm log}_{b}a}=n^{{\rm log}_{4}3}=O(n^{0.793}) nlogba=nlog43=O(n0.793)。所以有 f ( n ) = n l g n = Ω ( n l o g b a + ε ) f(n)=n{\rm lg}n=Ω(n^{{\rm log}_{b}a+ε}) f(n)=nlgn=Ω(nlogba+ε),其中 ε ≈ 0.2 ε ≈ 0.2 ε0.2。并且当 3 / 4 ≤ c < 1 3/4 ≤ c < 1 3/4c<1时,有 a f ( n / b ) = 3 f ( n / 4 ) = 3 • ( n / 4 ) • l g ( n / 4 ) = ( 3 / 4 ) • n l g ( n / 4 ) ≤ c f ( n ) = c n l g n af(n/b) = 3f(n/4) = 3•(n/4)•{\rm lg}(n/4) = (3/4)•n{\rm lg}(n/4) ≤ cf(n) = cn{\rm lg}n af(n/b)=3f(n/4)=3(n/4)lg(n/4)=(3/4)nlg(n/4)cf(n)=cnlgn。所以可以应用主定理的情况3,从而得到解 T ( n ) = Θ ( f ( n ) ) = Θ ( n l g n ) T(n)=Θ(f(n))=Θ(n{\rm lg}n) T(n)=Θ(f(n))=Θ(nlgn)
  最后看一个递归式 T ( n ) = 2 T ( n / 2 ) + n l g n T(n)=2T(n/2)+n{\rm lg}n T(n)=2T(n/2)+nlgn。套用主定理,有 a = 2 , b = 2 a = 2, b = 2 a=2,b=2并且 f ( n ) = n l g n f(n) = n{\rm lg}n f(n)=nlgn,于是有 n l o g b a = n l o g 2 2 = n n^{{\rm log}_{b}a}=n^{{\rm log}_{2}2}=n nlogba=nlog22=n。虽然 f ( n ) = n l g n f(n) = n{\rm lg}n f(n)=nlgn渐近大于 n l o g b a = n n^{{\rm log}_{b}a}=n nlogba=n,但并不是“多项式意义上的渐近大于”,即不存在 ε > 0 ε > 0 ε>0,使得 f ( n ) = Ω ( n l o g b a + ε ) f(n)=Ω(n^{{\rm log}_{b}a+ε}) f(n)=Ω(nlogba+ε)。因此这个递归式不能应用主定理求解。

练习

4.5-1 对下列递归式,使用主方法求出渐近紧确界。
  a. T ( n ) = 2 T ( n / 4 ) + 1 T(n)=2T(n/4)+1 T(n)=2T(n/4)+1
  b. T ( n ) = 2 T ( n / 4 ) + n T(n)=2T(n/4)+\sqrt{n} T(n)=2T(n/4)+n
  c. T ( n ) = 2 T ( n / 4 ) + n T(n)=2T(n/4)+n T(n)=2T(n/4)+n
  d. T ( n ) = 2 T ( n / 4 ) + n 2 T(n)=2T(n/4)+n^2 T(n)=2T(n/4)+n2
  
  a.
  应用主定理,根据递归式有 a = 2 , b = 4 , f ( n ) = 1 a = 2, b = 4, f(n) = 1 a=2,b=4,f(n)=1,所以有 n l o g b a = n l o g 4 2 = n 1 / 2 n^{{\rm log}_{b}a}=n^{{\rm log}_{4}2}=n^{1/2} nlogba=nlog42=n1/2。于是有 f ( n ) = 1 = O ( n 1 / 2 − ε ) = O ( n l o g b a − ε ) f(n)=1=O(n^{1/2-ε})=O(n^{{\rm log}_{b}a-ε}) f(n)=1=O(n1/2ε)=O(nlogbaε),其中 ε = 1 / 2 ε = 1/2 ε=1/2。因此,可以应用主定理情况1,于是 T ( n ) = Θ ( n l o g b a ) = Θ ( n 1 / 2 ) T(n)=Θ(n^{{\rm log}_{b}a})=Θ(n^{1/2}) T(n)=Θ(nlogba)=Θ(n1/2)
  b.
  应用主定理,根据递归式有 a = 2 , b = 4 , f ( n ) = n = n 1 / 2 a = 2, b = 4, f(n) =\sqrt{n}=n^{1/2} a=2,b=4,f(n)=n =n1/2,所以有 n l o g b a = n l o g 4 2 = n 1 / 2 n^{{\rm log}_{b}a}=n^{{\rm log}_{4}2}=n^{1/2} nlogba=nlog42=n1/2。于是有 f ( n ) = n 1 / 2 = Θ ( n 1 / 2 ) = Θ ( n l o g b a ) f(n)=n^{1/2}=Θ(n^{1/2})=Θ(n^{{\rm log}_{b}a}) f(n)=n1/2=Θ(n1/2)=Θ(nlogba)。因此,可以应用主定理情况2,于是 T ( n ) = Θ ( n l o g b a l g n ) = Θ ( n 1 / 2 l g n ) T(n)=Θ(n^{{\rm log}_{b}a}{\rm lg}n)=Θ(n^{1/2}{\rm lg}n) T(n)=Θ(nlogbalgn)=Θ(n1/2lgn)
  c.
  应用主定理,根据递归式有 a = 2 , b = 4 , f ( n ) = n a = 2, b = 4, f(n) = n a=2,b=4,f(n)=n,所以有 n l o g b a = n l o g 4 2 = n 1 / 2 n^{{\rm log}_{b}a}=n^{{\rm log}_{4}2}=n^{1/2} nlogba=nlog42=n1/2。于是有 f ( n ) = n = Ω ( n 1 / 2 + ε ) = Ω ( n l o g b a + ε ) f(n)=n=Ω(n^{1/2+ε})=Ω(n^{{\rm log}_{b}a+ε}) f(n)=n=Ω(n1/2+ε)=Ω(nlogba+ε),其中 ε = 1 / 2 ε = 1/2 ε=1/2。并且当 1 / 2 ≤ c < 1 1/2 ≤ c < 1 1/2c<1时,有 a f ( n / b ) = 2 f ( n / 4 ) = 2 • ( n / 4 ) = n / 2 ≤ c f ( n ) = c n af(n/b) = 2f(n/4) = 2•(n/4) = n/2 ≤ cf(n) = cn af(n/b)=2f(n/4)=2(n/4)=n/2cf(n)=cn。因此,可以应用主定理情况3,于是 T ( n ) = Θ ( f ( n ) ) = Θ ( n ) T(n) = Θ(f(n)) = Θ(n) T(n)=Θ(f(n))=Θ(n)
  d.
  应用主定理,根据递归式有 a = 2 , b = 4 , f ( n ) = n 2 a = 2, b = 4, f(n) = n^2 a=2,b=4,f(n)=n2,所以有 n l o g b a = n l o g 4 2 = n 1 / 2 n^{{\rm log}_{b}a}=n^{{\rm log}_{4}2}=n^{1/2} nlogba=nlog42=n1/2。于是有 f ( n ) = n 2 = Ω ( n 1 / 2 + ε ) = Ω ( n l o g b a + ε ) f(n)=n^2=Ω(n^{1/2+ε})=Ω(n^{{\rm log}_{b}a+ε}) f(n)=n2=Ω(n1/2+ε)=Ω(nlogba+ε),其中 ε = 3 / 2 ε = 3/2 ε=3/2。并且当 1 / 8 ≤ c < 1 1/8 ≤ c < 1 1/8c<1时,有 a f ( n / b ) = 2 f ( n / 4 ) = 2 • ( n / 4 ) 2 = n / 8 ≤ c f ( n ) = c n af(n/b) = 2f(n/4) = 2•(n/4)^2 = n/8 ≤ cf(n) = cn af(n/b)=2f(n/4)=2(n/4)2=n/8cf(n)=cn。因此,可以应用主定理情况3,于是 T ( n ) = Θ ( f ( n ) ) = Θ ( n 2 ) T(n) = Θ(f(n)) = Θ(n^2) T(n)=Θ(f(n))=Θ(n2)

4.5-2 Caesar教授想设计一个渐近快于Strassen算法的矩阵相乘算法。他的算法使用分治法,将每个矩阵分解为n/4 × n/4的子矩阵,分解和合并步骤共花费 Θ ( n 2 ) Θ(n^2) Θ(n2)时间。他需要确定,他的算法需要创建多少个子问题,才能击败Strassen算法。如果他的算法创建 a a a个子问题,则描述运行时间 T ( n ) T(n) T(n)的递归式为 T ( n ) = a T ( n / 4 ) + Θ ( n 2 ) T(n) = aT(n/4) + Θ(n^2) T(n)=aT(n/4)+Θ(n2)。Caesar教授的算法如果要渐近快于Strassen算法, a a a的最大整数值应是多少?
  
  对递归式 T ( n ) = a T ( n / 4 ) + Θ ( n 2 ) T(n) = aT(n/4) + Θ(n^2) T(n)=aT(n/4)+Θ(n2)应用主定理,有 b = 4 , f ( n ) = Θ ( n 2 ) b = 4, f(n) = Θ(n^2) b=4,f(n)=Θ(n2),所以有 n l o g b a = n l o g 4 a n^{{\rm log}_{b}a}=n^{{\rm log}_{4}a} nlogba=nlog4a
  Strassen算法的时间为 n l g 7 n^{{\rm lg}7} nlg7。要让新算法的时间小于 n l g 7 n^{{\rm lg}7} nlg7,必须满足 n l o g 4 a < n l g 7 n^{{\rm log}_{4}a}<n^{{\rm lg}7} nlog4a<nlg7,得到 a < 49 a < 49 a<49。因此, a a a的最大值为 48 48 48

4.5-3 使用主方法证明:二分查找递归式 T ( n ) = T ( n / 2 ) + Θ ( 1 ) T(n) = T(n/2) + Θ(1) T(n)=T(n/2)+Θ(1)的解是 T ( n ) = Θ ( l g n ) T(n) = Θ({\rm lg}n) T(n)=Θ(lgn)。(二分查找的描述见练习2.3-5)。
  
  应用主定理,根据递归式有 a = 1 , b = 2 , f ( n ) = Θ ( 1 ) a = 1, b = 2, f(n) = Θ(1) a=1,b=2,f(n)=Θ(1),所以有 n l o g b a = n l o g 2 1 = n 0 = 1 n^{{\rm log}_{b}a}=n^{{\rm log}_{2}1}=n^0=1 nlogba=nlog21=n0=1。于是有 f ( n ) = Θ ( 1 ) = Θ ( n l o g b a ) f(n)=Θ(1)=Θ(n^{{\rm log}_{b}a}) f(n)=Θ(1)=Θ(nlogba)。因此,可以应用主定理情况2,于是 T ( n ) = Θ ( n l o g b a l g n ) = Θ ( l g n ) T(n)=Θ(n^{{\rm log}_{b}a}{\rm lg}n)=Θ({\rm lg}n) T(n)=Θ(nlogbalgn)=Θ(lgn)

4.5-4 主方法能应用于递归式 T ( n ) = 4 T ( n / 2 ) + n 2 l g n T(n) = 4T(n/2) + n^2{\rm lg}n T(n)=4T(n/2)+n2lgn吗?请说明为什么可以或者为什么不可以。给出这个递归式的一个渐近上界。
  
  应用主定理,根据递归式有 a = 4 , b = 2 , f ( n ) = n 2 l g n a = 4, b = 2, f(n) = n^2{\rm lg}n a=4,b=2,f(n)=n2lgn,所以有 n l o g b a = n l o g 2 4 = n 2 n^{{\rm log}_{b}a}=n^{{\rm log}_{2}4}=n^2 nlogba=nlog24=n2。虽然 f ( n ) = n 2 l g n f(n) = n^2{\rm lg}n f(n)=n2lgn渐近大于 n l o g b a = n 2 n^{{\rm log}_{b}a}=n^2 nlogba=n2,但不是多项式意义上的渐近大于,即不存在 ε > 0 ε > 0 ε>0,使得 f ( n ) = Ω ( n l o g b a + ε ) f(n)=Ω(n^{{\rm log}_{b}a+ε}) f(n)=Ω(nlogba+ε)。因此该递归式不能应用主定理求解。考虑用递归树方法求解。创建递归树,如下图所示。
  在这里插入图片描述
  在递归树中,深度为 i i i的结点对应规模为 n / 2 i n/2^i n/2i的子问题。当 n / 2 i = 1 n/2^i = 1 n/2i=1时,即 i = l g n i = {\rm lg}n i=lgn时,子问题规模变为 1 1 1,这对应于叶结点 T ( 1 ) T(1) T(1),因此树的高度 h = l g n h = {\rm lg}n h=lgn
  每层的结点数都是上一层的 4 4 4倍,因此深度为 i i i的结点数为 4 i 4^i 4i。深度为 i i i的结点对应的子问题规模为 n / 2 i n/2^i n/2i,除叶结点外,深度为 i i i的每个结点的代价为 ( n / 2 i ) 2 • l g ( n / 2 i ) (n/2^i)^2•{\rm lg}(n/2^i) (n/2i)2lg(n/2i)。因此,除叶结点外,深度为 i i i的所有结点的代价为 4 i • ( n / 2 i ) 2 • l g ( n / 2 i ) = n 2 • l g ( n / 2 i ) = n 2 ( l g n − i ) 4^i•(n/2^i)^2•{\rm lg}(n/2^i)=n^2•{\rm lg}(n/2^i)=n^2({\rm lg}n-i) 4i(n/2i)2lg(n/2i)=n2lg(n/2i)=n2(lgni)。叶结点一共有 4 l g n = n 2 4^{{\rm lg}n}=n^2 4lgn=n2个,所以叶结点那一层的代价为 Θ ( n 2 ) Θ(n^2) Θ(n2)
  现在将每一层的代价加起来,得到
  在这里插入图片描述
  下面用代入法验证这一结果。我们要证明的是:存在正常数 c c c,使得 T ( n ) ≤ c n 2 l g 2 n T(n)≤cn^2{\rm lg}^2n T(n)cn2lg2n对足够大的 n n n都成立。
  取初始情况 T ( 1 ) = 1 T(1) = 1 T(1)=1。无论取 c c c为多少,都不能使得 T ( 1 ) ≤ c • 1 2 • l g 2 1 = 0 T(1) ≤ c•1^2•{\rm lg}^21 = 0 T(1)c12lg21=0成立。于是我们要取初始情况为 T ( 2 ) T(2) T(2)。根据递归式,有 T ( 2 ) = 4 T ( 1 ) + 1 2 • l g 1 = 4 T(2) = 4T(1) + 1^2•{\rm lg}1 = 4 T(2)=4T(1)+12lg1=4。只要取 c ≥ 1 c ≥ 1 c1,就能使得 T ( 2 ) ≤ c • 2 2 • l g 2 2 = 4 c T(2) ≤ c•2^2•{\rm lg}^22 = 4c T(2)c22lg22=4c成立。
  现在考虑 n ≥ 3 n ≥ 3 n3的情况。假设 T ( n ) ≤ c n 2 l g 2 n T(n)≤cn^2{\rm lg}^2n T(n)cn2lg2n 2 , 3 , … , n − 1 2, 3, …, n−1 2,3,,n1都成立,于是有
  在这里插入图片描述
  现在要选取合适的 c c c,使得不等式 c n 2 l g 2 n − 2 c n 2 l g n + c n 2 + n 2 l g n ≤ c n 2 l g 2 n cn^2{\rm lg}^2 n-2cn^2{\rm lg}n+cn^2+n^2{\rm lg}n≤cn^2{\rm lg}^2n cn2lg2n2cn2lgn+cn2+n2lgncn2lg2n成立。对该不等式做一下变换。
  在这里插入图片描述
  当 n ≥ 3 n ≥ 3 n3时, 1 2 − 1 / l g n \frac{1}{2-1/{\rm lg}n} 21/lgn1是单调递减的,并且在 n = 3 n = 3 n=3时取得最大值 1 2 − l o g 3 2 \frac{1}{2-{\rm log}_32} 2log321。因此,只要取 c ≥ 1 2 − l o g 3 2 c≥\frac{1}{2-{\rm log}_32} c2log321,就能使得不等式 c n 2 l g 2 n − 2 c n 2 l g n + c n 2 + n 2 l g n ≤ c n 2 l g 2 n cn^2{\rm lg}^2 n-2cn^2{\rm lg}n+cn^2+n^2{\rm lg}n≤cn^2{\rm lg}^2n cn2lg2n2cn2lgn+cn2+n2lgncn2lg2n成立,此时 T ( n ) ≤ c n 2 l g 2 n T(n)≤cn^2{\rm lg}^2n T(n)cn2lg2n成立。
  综合考虑初始情况 T ( 2 ) T(2) T(2),我们最终要取 c ≥ 1 c≥1 c1。于是 T ( n ) = O ( n 2 l g 2 n ) T(n)=O(n^2{\rm lg}^2n) T(n)=O(n2lg2n)得证。

4.5-5 考虑主定理情况3的一部分:对某个常数 c < 1 c < 1 c<1,正则条件 a f ( n / b ) ≤ c f ( n ) af(n/b) ≤ cf(n) af(n/b)cf(n)是否成立。给出一个例子,其中常数 a ≥ 1 , b > 1 a ≥ 1,b > 1 a1b>1且函数 f ( n ) f(n) f(n)满足主定理情况3中除正则条件外的所有条件。
  

  • 13
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 时间复杂度的求解取决于实际的算法,一般可以分析算法的执行步骤,统计每个步骤所用的时间,从而得时间复杂度。对于递归算法,可以通过分析递归函数的执行次数,以及每次调用递归函数所消耗的时间,来求解时间复杂度。 ### 回答2: 要求解递归的时间复杂度,我们可以按照以下步骤进行: 1. 首先,确定递归的形递推通常具有递归的特点,即问题的规模需要通过不断缩小来递归求解。例如,递归可能包含递归调用,或者具有递归的结构。 2. 其次,推导递归递归深度。递归的时间复杂度通常与递归的深度相关,即需要确定递归递归深度。 3. 然后,分析递归函数的时间代价。将递归的执行过程分解为不同的子问题,确定每个子问题的时间代价。这可能涉及到递归子问题的规模和计算时间。 4. 最后,通过递归的时间代价和递归递归深度来确定递归的时间复杂度。 需要注意的是,递归的时间复杂度可能与递归的规模有关,也可能与递归的深度有关,具体取决于具体的情况和问题的性质。同时,递归的时间复杂度也可能需要通过数学推导或递归树等方法进行求解。 总的来说,求解递归的时间复杂度需要通过对递归的分析、递归深度的确定以及递归函数的时间代价的分析来进行。 ### 回答3: 求解递归的时间复杂度需要以下步骤: 1. 确定递归的形:首先,我们需要确定递归的形递归方程,即描述递归的基本操作和递归关系的数学等。这通常需要根据问题的特点和递归的实现进行分析。 2. 求解递归方程:接下来,我们需要求解递归方程,即找到递归的解析解。这可以通过代入法、特征根法或母函数法等数学方法来实现。在这一步骤中,我们可以得到递归的通项公,并进一步进行化简。 3. 分析递归的时间复杂度:一旦我们得到递归的通项公,我们可以通过分析公的增长率来确定递归的时间复杂度。具体来说,我们可以评估递归中的递归调用次数和每次递归操作的时间复杂度,然后将它们相乘得到最终的时间复杂度。 4. 解决递归的边界条件:最后,我们需要解决递归的边界条件,即递归的终止条件。这是因为递归只有在满足终止条件时才能收敛,否则递归会无限进行下去。在分析时间复杂度时,我们需要考虑递归的基本操作在边界条件下的执行次数和时间复杂度。 需要注意的是,求解递归的时间复杂度可能涉及到数学推理和推导,需要运用到数学分析的方法。具体的求解过程会根据不同的递归和问题而有所不同。同时,我们也可以借助工具和数值计算对递归进行近似求解,以便更好地估计时间复杂度的上界和下界。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值