为什么算法复杂度用大 O 表示法而不是 Theta 给出?
Why is an algorithm complexity given in the Big O notation instead of Theta?
我知道 Big O、Theta 和 Omega 符号是什么,但是例如,如果我的算法是 for 内部 for,循环 n 次,我的复杂度将是 O(n²),但为什么 O( n²) 而不是 ϴ(n²)?由于复杂度实际上是 O(n²) 和 Ω(n²),因此它也将是 ϴ(n²),而且我看不出有任何理由不使用 ϴ(n²) 而不是 O(n²),因为ϴ(n²) 用上限值和下限值限制了我的复杂性,而不仅仅是在 O(n²) 的情况下上限。
如果 f(n) = Θ(g(n))
则 f(n) = O(g(n))
。这是因为 Θ(g(n)) ⊆ O (g(n))
.
在您的特定情况下,如果循环运行 正好 n^2
时间复杂度在 O(n^2)
和 Θ(n^2)
中。
big-O 通常足够的主要原因是我们在分析算法性能时更感兴趣的是最坏情况下的时间复杂度,知道最坏情况通常就足够了。
此外,并不总是可以找到一个紧密的界限。
我知道 Big O、Theta 和 Omega 符号是什么,但是例如,如果我的算法是 for 内部 for,循环 n 次,我的复杂度将是 O(n²),但为什么 O( n²) 而不是 ϴ(n²)?由于复杂度实际上是 O(n²) 和 Ω(n²),因此它也将是 ϴ(n²),而且我看不出有任何理由不使用 ϴ(n²) 而不是 O(n²),因为ϴ(n²) 用上限值和下限值限制了我的复杂性,而不仅仅是在 O(n²) 的情况下上限。
如果 f(n) = Θ(g(n))
则 f(n) = O(g(n))
。这是因为 Θ(g(n)) ⊆ O (g(n))
.
在您的特定情况下,如果循环运行 正好 n^2
时间复杂度在 O(n^2)
和 Θ(n^2)
中。
big-O 通常足够的主要原因是我们在分析算法性能时更感兴趣的是最坏情况下的时间复杂度,知道最坏情况通常就足够了。
此外,并不总是可以找到一个紧密的界限。