递归关系:迭代求解
Recurrence relation: iteration solving
存在如下递推关系:
T(n) = 2 T(n-1) + O(1) for n > 1
otherwise, its T(n) = O(1)
通过迭代,到目前为止我得到了,
T(n) = 2(2T(n-2) + 1) + 1 --- 1
T(n) = 2(2(2T(n-3) + 1) + 1) + 1 ---- 2
T(n) = 2(2(2(2T(n-4) + 1) + 1) + 1) + 1 ------3
T(n) = 2(2(2(2(2T(n-5) + 1) + 1) + 1) + 1) +1 ----- 4
我不确定下一步该怎么做才能找到上限时间复杂度。谁能帮我解决这个问题。
看第4步
T(n) = 2(2(2(2(2T(n-5) + 1) + 1) + 1) + 1) +1 ----- 4
T(n) = 2(2(2(2(2T(n-5))))) + 16 + 8 + 4 + 2 +1 =
T(n) = 2^4* 2T(n-5) + 2^4 + 2^3 + 2^2 + 2^1 + 2^0 =
T(n) = 2^4* 2T(n-5) + 2^5 -1 =
同理,再开发一次你会得到:
T(n) = 2^5 *2T(n-6) + 2^5 + 2^5-1
T(n) = 2^5 * 2T(n-6) + 2^6-1
现在我们可以理解,如果我们将它展开到 T(1) 的基数,我们得到:
T(n) = .... = 2^(n) -1
请注意,此方法仅提供解决问题的直觉,并非证据。
要正式证明您可以使用归纳法的声明,并声明假设 T(n) = 2^n -1
:
基地:T(1) = 1 = 2^1 -1
归纳假设:对于所有 k<n
、T(k) = 2^k-1
证明:
T(n) = 2T(n-1) +1 =(i.h.) 2* (2^(n-1) -1) + 1 = 2^n -2 + 1 = 2^n - 1
备注:T(1) 基本子句实际上是 C
,类似地,T(n) = 2T(n-1)+C
表示某些常数而不是 1
,但为简单起见,我使用 1。将其更改为 C
.
时,逻辑根本不会改变
根据O(1)
的定义,我们知道对于一些常数N
和c
,对于所有n >= N
T(n+1) <= 2 T(n) + c
因此,识别出几何系列的模式,
T(N+1) <= 2 T(N) + c
T(N+2) <= 2 T(N+1) + c <= 4 T(N) + 2 c + c
T(N+3) <= 2 T(N+2) + c <= 8 T(N) + 4 c + 2 c + c
...
T(N+k) <= 2^k T(N) + (2^k-1) c
然后将N + k
替换为n
,
T(n) <= 2^(n-N) T(N) + (2^(n-N)-1) c <= 2^n (2^(-N) (T(N) + c))
证明T(n)
是O(2^n)
.
存在如下递推关系:
T(n) = 2 T(n-1) + O(1) for n > 1
otherwise, its T(n) = O(1)
通过迭代,到目前为止我得到了,
T(n) = 2(2T(n-2) + 1) + 1 --- 1
T(n) = 2(2(2T(n-3) + 1) + 1) + 1 ---- 2
T(n) = 2(2(2(2T(n-4) + 1) + 1) + 1) + 1 ------3
T(n) = 2(2(2(2(2T(n-5) + 1) + 1) + 1) + 1) +1 ----- 4
我不确定下一步该怎么做才能找到上限时间复杂度。谁能帮我解决这个问题。
看第4步
T(n) = 2(2(2(2(2T(n-5) + 1) + 1) + 1) + 1) +1 ----- 4
T(n) = 2(2(2(2(2T(n-5))))) + 16 + 8 + 4 + 2 +1 =
T(n) = 2^4* 2T(n-5) + 2^4 + 2^3 + 2^2 + 2^1 + 2^0 =
T(n) = 2^4* 2T(n-5) + 2^5 -1 =
同理,再开发一次你会得到:
T(n) = 2^5 *2T(n-6) + 2^5 + 2^5-1
T(n) = 2^5 * 2T(n-6) + 2^6-1
现在我们可以理解,如果我们将它展开到 T(1) 的基数,我们得到:
T(n) = .... = 2^(n) -1
请注意,此方法仅提供解决问题的直觉,并非证据。
要正式证明您可以使用归纳法的声明,并声明假设 T(n) = 2^n -1
:
基地:T(1) = 1 = 2^1 -1
归纳假设:对于所有 k<n
、T(k) = 2^k-1
证明:
T(n) = 2T(n-1) +1 =(i.h.) 2* (2^(n-1) -1) + 1 = 2^n -2 + 1 = 2^n - 1
备注:T(1) 基本子句实际上是 C
,类似地,T(n) = 2T(n-1)+C
表示某些常数而不是 1
,但为简单起见,我使用 1。将其更改为 C
.
根据O(1)
的定义,我们知道对于一些常数N
和c
,对于所有n >= N
T(n+1) <= 2 T(n) + c
因此,识别出几何系列的模式,
T(N+1) <= 2 T(N) + c
T(N+2) <= 2 T(N+1) + c <= 4 T(N) + 2 c + c
T(N+3) <= 2 T(N+2) + c <= 8 T(N) + 4 c + 2 c + c
...
T(N+k) <= 2^k T(N) + (2^k-1) c
然后将N + k
替换为n
,
T(n) <= 2^(n-N) T(N) + (2^(n-N)-1) c <= 2^n (2^(-N) (T(N) + c))
证明T(n)
是O(2^n)
.