Big O - 判断函数是否是Big O

Big O - Determining whether the function is Big O

我的教科书在解释 big-o 的工作原理方面非常糟糕,几乎没有提供没有细节的示例。

我有一些练习题正在尝试尝试,但多亏了教科书 我不明白如何解决这些问题。

这是一个:

determine whether each of these functions is O(x)
f(x)=x^2+x+1

determine whether each of these functions is O(x^2)
f(x)=xlogx

我该如何解决这些问题?从我网上收集的资料和教科书来看,我觉得这很混乱..

提前致谢。

对于第一个,x^2+x+1 不是 O(x),因为无论 x 变得多大,第一个表达式的增长速度都比第二个快。通常,x^2+x+1 会被称为 O(x^2) ("quadratic"),因为 x^2 是主导词。

对于第二个,xlogxO(x^2) 因为第二个表达式至少和第一个一样快。示例约束为 c=1x>0。虽然这是一个过于保守的表达,一般来说 xlogx 会被说成 O(xlogx) ("linearithmic"),它本身的复杂性 class.

关于大 O 符号的维基百科文章列出了其他常见的 named complexities。虽然有分析函数和确定其 Big-O 复杂度的通用方法,但熟悉常见方法并识别表达式或算法中最相关的方法通常会更快。通常您只会遇到一些常见的复杂性 classes。按照复杂性递增的顺序,这些是:

  • 常量 (1)
  • 对数 (logx)
  • 线性(x
  • 线性(或通常只是 "n-log-n")(xlogx
  • 多项式(x^c for c>1
  • 指数(c^x 对于 c>1