【问题标题】:Asymptotic time complexity of c*n*(1 - n)c*n*(1 - n) 的渐近时间复杂度
【发布时间】:2023-09-06 16:00:01
【问题描述】:

假设解决一个递归,我发现:

T(n) = c*n*(1-n) = c*n - c*n^2

其中 c 是一个正常数,n 是输入的大小

我应该考虑这个递归的渐近时间复杂度,O(n),因为 n^2 项是负数吗?

更新:

例如,假设我们有以下循环:

T(n) = T(a*n) + O(n),其中因子 a 小于 1: => T(n) = c*n*(1 + a + a^2 + a^3 + ... 对于 logan 项) => T(n) = c*n*(1 - a^logan)/(1 - a) => T(n) = c*n*(1 - n)/(1 - a) ~ c*n*(1-n)

【问题讨论】:

  • 不,你的公式有问题。即使在 n=2 时,您的时间也是负数
  • 我已经更新了一个例子
  • 提示:你在推理过程中出现了错误的飞跃,导致了符号错误。

标签: time-complexity recurrence


【解决方案1】:

@meowgoesthedog 在 cmets 中建议的错误是由于推理中的错误跳跃(有 log(1/a)n 项而不是 loga n);正确的推导如下:

T(n) = T(a*n) + O(n),其中因子 a 小于 1: => T(n) = c*n*(1 + a + a^2 + a^3 + ... 对于 log(1/a)n 项) => T(n) = c*n*(1 - a^log(1/a)n)/(1 - a) => T(n) = c*n*(1 - n)/(1 - a) ~ c*n*(1-1/n) ~ O(n)

【讨论】: