【问题标题】:Calculate Complexity of T(n)? [duplicate]计算 T(n) 的复杂度? [复制]
【发布时间】:2020-11-06 20:34:22
【问题描述】:
鉴于: T(n) = T(n/10) + T(an) + n 用于某些 a(我对其价值一无所知),并且:T(n) = 1 如果 n < 10。
我想检查以下是否可能(对于一些a 值,我想找到可能的最小 a):
对于每一个c > 0,都有一个n<sub>0</sub> > 0,这样对于每一个n > n<sub>0</sub>,T(n) >= c * n i> 或者换句话说 T(n)=omega(n)
感谢任何帮助。
【问题讨论】:
标签:
function
recursion
tree
time-complexity
big-o
【解决方案1】:
假设 a
T(n) = 1 ≤ n ≤ cn.
归纳地,对于 n ≥ 10,
T(n)
= T(n/10) + T(an) + n
≤ cn/10 + can + n
= c(1/10 + a + 1/c)n
≤ c(1/10 + a + 9/10 - a)n
= cn.
现在假设 a = 9/10。对于 1 ≤ n
T(n) = 1 > n log10 n - n.
归纳地,对于 n ≥ 10,
T(n)
= T(n/10) + T(9n/10) + n
> (n/10) log10 (n/10) - (n/10) + (9n/10) log10 (9n/10) - (9n/10) + n
= (n/10) log10 (n/10) + (9n/10) log10 (9n/10)
> (n/10) log10 (n/10) + (9n/10) log10 ( n/10)
= (n/10) (log10 n - 1) + (9n/10) (log10 n - 1)
= n log10 n - n.
给定 c > 0,选择 n0 使得 log10 n0 - 1 = c,即 n0 = exp10(c + 1)。那么对于所有 n > n0,
T(n) > n log10 n - n = n(log10 n - 1) > n(log10 n0 - 1) = cn.
【解决方案2】:
对于每一个 c > 0 有 n0 > 0 使得对于每一个 n > n0,T(n) >= c*n
我们假设 T(n) >= cn 对于某些 a 和每个 c > 0 成立。
将不等式中的递推代入并求解a,可以得到:
T(n) >= c*n
(c*n/10) + (c*a*n) + n >= c*n
a >= (9/10) - (1/c)
由于我们期望的结果是对所有 c 都成立(正式应用极限 c 趋于无穷大,这是 RHS 将最大化的地方),我们得到 a >= (9/10)。因此,a 的最小值是 (9/10),它将满足所有 c 的 T(n) >= c*n。
在此之后,你可以通过归纳证明,确实是这样。
【解决方案3】:
在每个函数中,您需要找到方程的最高影响变量。在大尺度上,影响这个函数的最小可能 N 是任何常数。