我正在完成一项任务,但我的一位朋友不同意一部分的答案。
f(n) = 2n-2n^3
我发现复杂性为f(n) = O(n^3)
我错了吗?
答案 0 :(得分:0)
首先,排序O(f(n)) = n^3
的符号并没有多大意义。你可以说n ^ 3属于O(f(n)),这意味着对于足够大的n^3
,n
的增长速度不会比f(n)快。然而,这种说法并非如此。当n无限时,f(n)
无限地减少。因此,即使常数0也不属于O(f(n))
。
另请参阅this table on wikipedia,其中提供了一个很好的摘要。
编辑:请注意,当问题包括:O(f(n)) = n^3
时,此答案已发布。更改后,相同的语句保持不变,但f(n)确实属于O(n^3)
。再次考虑类似因素,f(n)属于O(1)
或任何比-n^3
增长更快的函数。
答案 1 :(得分:0)
你没错,因为O(n ^ 3)没有提供紧束缚。但是,通常您会假设f
正在增加,并尝试找到g
为真的最小函数f=O(g)
。考虑一个简单的函数f=n+3
。对f=O(n^3)
说n+3 < n^3
是正确的,因为所有n > 2
都是f=O(n)
(只是选择一个任意常数)。但是,对于所有n+3 < 2n
来说n > 3
以来f
更加“正确”,这可以让您更好地了解n
的行为f
增加。
在您的情况下,当n
增加时,f = O(g)
正在减少,因此任何函数的n
确实如此2n - 2n^3 = O(1)
增加时保持正值。对于某些正常数,“最小”(或者更确切地说,生长最慢)这样的函数是常数函数,我们通常将其写为2n - 2n^3 < 1
,因为所有n>0
都是n
。
你甚至可以发现n
的某些功能随着f
的增加而减少,但减少的速度比n
慢,但这种用法很少见。 Big-O表示法最常用于描述算法运行时间随着输入大小的增加,因此{{1}}几乎普遍被认为是正的。