我已经开始阅读C ++ STL并且还找到了一本书!当我正在阅读复杂性时,它在选择算法和数据结构方面发挥了重要作用我已经看到Big Oh表示法仅用于不同的变量(O(n),O(log(n)。,))冲浪我找到了
大哦表示f(x) = O(g(x))--(big-oh) means that the growth rate of f(x) is asymptotically less than or equal to to the growth rate of g(x)
所以我的问题是,如果算法时间复杂度总是等于g(x)的增长,为什么我们将复杂性称为f(x)=O(n)[Big oh of n]
而不是使用(theta),因为当我读到(theta)时)说f(x) = Θ(g(x)) (theta) means that the growth rate of f(x) is asymptotically equal to the growth rate of g(x)
这里的符号可能是(θ)而不是O(N)不是吗?或任何使用大哦的原因。
我们应该使用什么样的符号来衡量空间的复杂性。在这本书中,我没有看到关于空间复杂性的任何关于STL的讨论。
答案 0 :(得分:9)
为什么我们将复杂性称为f(x)= O(n)[n的大哦]而不是使用(theta)
Theta可能有助于描述特定算法的行为方式。但是STL - 或者一般的C ++标准库 - 不是单一的实现,所以你无法描述它的行为。
STL的描述是关于实现选择的算法必须如何表现的一组要求。复杂性是这些要求的一部分。要求论证的复杂性必须至少是某种东西是没有意义的。只有上限是相关的。因此,Big-O使用了。
我们应该用什么表示法来衡量空间复杂度
Big-O表示法也可用于空间复杂性。
答案 1 :(得分:1)
所以我的问题是,如果算法时间复杂度总是等于g(x)的增长,为什么......
事实并非如此。例如,排序的复杂性是Big-oh n * log(n),但在某些情况下可能会下降到线性。很少有人能给出算法的θ近似值。
通常标准也为功能提供了很大的保证,但我还没有看到任何限制。
我们应该用什么表示法来衡量空间复杂性。
Big-oh是函数增长的符号,可用于空间和时间复杂度。
答案 2 :(得分:0)
一个原因是,如果一个实现者提出的算法是(例如)线性而不是O(n log n),如果函数被指定为Θ(n log n),则不允许它们使用它。 )。