我已经在 算法简介 中阅读了大O的定义,这本书并没有谈到我的困惑。
根据它的定义,每个人都知道函数T(n)= 3n属于O(n),我的困惑是所有属于O(n)的函数是否属于O(n ^ 2)和O(n ^ 3)和O(n ^ 4)和O(n ^ k)k> 1 ,因为大O描述了上限,而我可以找到正整数常数c和正整数当n> = n0时,常数n0满足0 <= 3n&lt; = cn ^ 2,如果答案为是,为什么人们更喜欢使用O(n)来描述T(n)= 3n,如果它的定义是严重的那么? / p>
更多,这些符号(大O,大theta,大欧米茄)在其他数学领域中使用过哪里?
请发布必要的参考资料或任何其他有关此
的书籍答案 0 :(得分:3)
部分答案:你的理解是正确的,O(n)是k(k)的O(n ^ k)的严格子集。 1。
为什么我们更喜欢O(n):如果你要求某种产品的价格(实际上是25美元)你更喜欢哪种答案:a)最多100或b)最多30。 假设f(n)在O(n)中给出了关于f(n)的更多信息,而不是说它在O(n ^ 2)中。
它还在哪里使用?例如,描述近似的误差项。
答案 1 :(得分:0)
f(n)=O(g(n))
确实表示g(n)
是渐近意义上f(n)
的上限,任何函数h(n)≥g(n)
也是上限,f(n)=O(h(n))
例如f(n)=O(n) => f(n)=O(n²)
。
但显然,更接近模拟目标函数的上限更有趣,据说是紧。因此,在可能的上限中,当知道它时,选择最紧密的界限。
对于某些函数,可能会出现相同的g(n)
也是下界(具有不同的渐近常数),我们称之为f(n)=Ω(g(n))
。在这种情况下,绑定是双向的,一个写f(n)=Θ(g(n))
。
当然,3n=Θ(n)
,但是3n<>Θ(n²)
。