algorithm - 大O/时间复杂度

标签 algorithm time-complexity big-o

这可能是一个微不足道的/数学概念,我似乎无法理解。那么如果某个算法的处理时间 T(n) 既是 Ω(n) 又是 O(n^3),我如何证明 T(n) 是 Θ(n^2) 是正确的还是错误的?

最佳答案

让我们比较一下这三个符号的定义。

(1) Ω(n) 表示(对于足够大的 n):n * k1 <= T(n)

(2) O(n^3) 表示(对于足够大的 n):n^3 * k2 >= T(n)

(3) Θ(n^2) 表示(对于足够大的 n):k3 * n^2 <= T(n) <= k4 * n^2

鉴于 (3),我们可以推断 T(n) 在 Ω(n) 和 O(n^3) 中,因为对于大数 n,n * k1 总是小于 n^2 * k2,如果我们只提供 k1=k2(但也适用于 k1、k2 的任何其他组合)。这同样适用于 O(n^3)。

这基本上意味着 Θ(n^2) 是比 Ω(n) 和 O(n^3) 都更强的约束。

然而,反过来是行不通的。如果 (1) 和 (2) 成立,T(n) 也可能是 T(n)=n,这显然不在 Θ(n^2) 中。所以我们不能从两个弱约束中推断出强约束。因此,该说法是错误的。

关于algorithm - 大O/时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25198368/

相关文章:

algorithm - secret 圣诞老人算法

algorithm - 深度优先组合算法

python - 使用 O(n) 时间和 O(1) 空间查找最频繁出现的元素

algorithm - 两个嵌套循环的简单算法复杂度

javascript - 防止循环内循环。如何降低复杂性

c - 该算法更准确的时间复杂度是多少?

algorithm - 计算大 O 复杂度

algorithm - 设计一个类似 Google Calendar 的日历系统

redis - redis中zadd的时间复杂度

algorithm - g(n) > h(n) 的大 O 表示法