Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Big o 大O-确定函数是否为大O_Big O - Fatal编程技术网

Big o 大O-确定函数是否为大O

Big o 大O-确定函数是否为大O,big-o,Big O,我的教科书很难解释big-o是如何工作的,而且几乎没有给出没有细节的例子 我有几个练习题想问,但多亏了课本 我不明白如何解决这些问题 这里有一个: determine whether each of these functions is O(x) f(x)=x^2+x+1 及 我如何着手解决这些问题?从我在网上收集的资料和教科书中,我发现这非常令人困惑 提前感谢。对于第一个表达式,x^2+x+1不是O(x),因为无论x有多大,第一个表达式的增长速度都比第二个表达式快。通常,x^2+x+1将被称

我的教科书很难解释big-o是如何工作的,而且几乎没有给出没有细节的例子

我有几个练习题想问,但多亏了课本 我不明白如何解决这些问题

这里有一个:

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

我如何着手解决这些问题?从我在网上收集的资料和教科书中,我发现这非常令人困惑


提前感谢。

对于第一个表达式,
x^2+x+1
不是
O(x)
,因为无论
x
有多大,第一个表达式的增长速度都比第二个表达式快。通常,
x^2+x+1
将被称为
O(x^2)
(“二次”),因为
x^2
是主要术语

对于第二个表达式,
xlogx
O(x^2)
,因为第二个表达式的增长速度至少与第一个表达式相同。示例约束为
c=1
x>0
。不过,这是一个过于保守的表达式,通常
xlogx
会被称为
O(xlogx)
(“线性算术”),它自己的复杂性类别

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

  • 常数(
    1
  • 对数(
    logx
  • 线性(
    x
  • 线性(或通常只是“n-log-n”)(
    xlogx
  • Poynomial(
    x^c
    用于
    c>1
  • 指数(
    c^x
    用于
    c>1

大O符号的定义是什么?既然你可以上网,就不要局限于你的课本。要确定f(x)是g(x)的大o,你必须证明f(x)@QaisSahel基本正确;但它也需要仅对x>某个k值为真。对于多项式函数(如第一个例子),你认为合适的近似值应该是什么?f(x)比g(x)增长得快,所以它不是O(x)是有意义的,但是你如何表示呢?为什么x^2+x+1大O(x^2)?难道x^2+x+1不是比x^2增长得更快吗?因此f(x)>g(x)不是O(x^2)?@QaisSahel
x^2+x+1是
O(x^2)
,因为你可以选择
c=3
x>1
,而
3*x^2
对于
x>1
,总是大于或等于
x^2+1
。例如,如果您试图将
x^3-9x^2
显示为
O(x^2)
,则不存在
c
k
值,因此对于所有
x>k
c*x^2
=
x^3-9x^2
。这是技术上的答案。更自然但不太严格的方法是将
x^2
项识别为“最大”项,这是大oh表示法中您所关心的,因为它表征的是函数的总体增长率,而不是给定
x
的确切值。
determine whether each of these functions is O(x^2)
f(x)=xlogx