Big-O - 函数的增长率

时间:2014-01-28 20:30:55

标签: big-o big-theta

我想了解更多关于 Big-O 的信息,并找到了这条信息:

'如果f(x) = O(g(x)) f(x)的增长率渐近地小于或等于g(x)的增长率

在这种情况下,渐近意味着什么? 另外,我有点难以理解为什么Big-Theta不依赖于我们使用的计算机? 有谁可以提供关于这两个问题的更多信息?

1 个答案:

答案 0 :(得分:4)

在此上下文中,“渐近地”一词指的是“随着x变为无穷大”。当有人说“f(x)渐渐渐渐慢于g(x)时,”它们意味着对于非常大的x值,函数g(x)将比函数f(x)增长得更快。这意味着对于足够大的x,只要f(x)≥1且g(x)≥1,g(x)的值总是最终大于函数f(x)。

关于这个问题:

  

我也很难理解为什么Big-Theta不依赖于我们使用的计算机?

虽然在CS中广泛使用O,Θ和Ω符号来描述运行时,但实际上并不是它们的意思。从技术上讲,这种表示法用于量化函数的增长率,而不管这些函数的实际含义是什么。例如,你会在Stirling's approximation中找到在离散数学中使用的大O符号,它估计ln n! as n ln n - n + O(log n),其中O(log n)表示“某个函数,其增长率为O(log n)”。在CS中,当我们说算法是O(n)时,真正意味着“描述该函数的运行时的函数是O(n)”。更准确地说,您会看到类似“算法的运行时为O(n)”或“算法需要时间O(n)”的表达式,突出显示大O符号用于描述算法的运行时而不是比算法本身。从这个意义上说,对你的问题“为什么不是Θ符号取决于计算机?”的答案有一个答案。是“Θ符号只是量化函数的增长率而与计算机无关。”

从另一个意义上说,特定计算机无关紧要的原因是Θ表示法是关于渐近运行时,而不是绝对运行时。如果算法具有运行时Θ(n),则意味着算法的运行时缩放为某个线性函数。该算法的运行时作为输入的大小实际上可能是100n + 137或20,000,000n-15,因为重要的是这些运行时增长的方式,而不是运行时本身。如果您在不同的计算机上运行相同的代码,则可能需要更多或更少的时间来运行,具体取决于所选的计算机,但几乎可以肯定它不会从线性扩展到二次缩放。这意味着渐近,运行时是相同的,但绝对运行时可能会非常不同。

希望这有帮助!