Big o `2n-2n^3的大O`

Big o `2n-2n^3的大O`,big-o,complexity-theory,Big O,Complexity Theory,我正在做一项作业,但我的一个朋友不同意其中一部分的答案 f(n) = 2n-2n^3 我发现复杂性是f(n)=O(n^3) 我错了吗?你没有错,因为O(n^3)不提供严格的界限。但是,通常假设f在增加,并尝试找到g为真的最小函数f=O(g)。考虑一个简单的函数 f= n+3 。可以正确地说,f=O(n^3),因为n+32(只是选择一个任意常数)。然而,说f=O(n)“更”正确,因为n+33,这让您更好地了解f在n增加时的行为 在您的例子中,f随着n的增加而减少,因此,对于任何函数来说,当n增加

我正在做一项作业,但我的一个朋友不同意其中一部分的答案

f(n) = 2n-2n^3
我发现复杂性是
f(n)=O(n^3)

我错了吗?

你没有错,因为O(n^3)不提供严格的界限。但是,通常假设
f
在增加,并尝试找到
g
为真的最小函数
f=O(g)
。考虑一个简单的函数<代码> f= n+3 。可以正确地说,
f=O(n^3)
,因为
n+3
对于所有
n>2
(只是选择一个任意常数)。然而,说
f=O(n)
“更”正确,因为
n+3<2n
对于所有
n>3
,这让您更好地了解
f
n
增加时的行为

在您的例子中,
f
随着
n
的增加而减少,因此,对于任何函数来说,当
n
增加时保持正值是正确的。“最小的”(或者更确切地说,增长最慢的)这样的函数是某个正常数的常数函数,我们通常把它写成
2n-2n^3=O(1)
,因为
2n-2n^3<1
对于所有
n>0


您甚至可以发现
n
的某些函数随着
n
的增加而减少,但减少的速度比
f
慢,但这种用法很少。Big-O表示法最常用于描述输入大小增加时的算法运行时间,因此几乎普遍认为
n
为正。

f(n)
对于非负
n
,严格来说是非正的,因此
f(n)=O(1)
也是正确的。@切普纳请注意,OP要求的是相反的,因此即使是1也不属于
O(f(n))
。我假设
O(f(n))=n^3
是不正确的符号用法;我从来没有见过在左边的符号上使用大o符号。问题可能是“找到一个函数
g
,使得
f=O(g)
,并且对于
n>0
总是负的单调递减函数有任何正常数函数作为界。