计算T(n)的复杂度?

时间:2020-11-06 20:34:22

标签: function recursion tree time-complexity big-o

给出:T(n) = T(n/10) + T(an) + n代表a(我对其价值一无所知),如果T(n) = 1则为n < 10。 / p>

我想检查以下是否可行(对于某些a值,我想找到最小的 a):

对于每个 c > 0 ,都有 n0 > 0 ,这样对于每个 n > n0 T(n) >= c * n 或换句话说T(n)= omega(n)

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

假设<9/10。令c = max(1 /(9/10-a),1),使得c≥1和1 / c≤9/10-a。然后对于1≤n <10,

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 <10,我们知道log10 n <1,因此

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.

答案 1 :(得分:1)

对于每个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最大化的地方),因此我们得到> =(9/10)。因此,a的最小值为(9/10),它将满足所有c的T(n) >= c*n

在此之后,您可以通过归纳证明确实如此。

答案 2 :(得分:0)

在每个函数中,您需要找到方程式的最高影响变量。从总体上讲,影响此功能的最小N可以是任何常数。