我正在为我的java iii课读课本。我们读到了关于big-oh的书,我对它的正式定义有点困惑。
形式定义:“函数f(n)是至多G(n)的阶数,即f(n)=O(g(n))-如果存在正实数c和正整数n,则所有n=n=f(n)<c g(n),即当n足够大时,C g(n)是f(n)上的上界。
好吧,这是有道理的。但坚持,继续读…这本书给了我一个例子:
“在第9.14段中,我们说
使用5n+3操作的算法
是o(n)。我们现在可以显示5n+3=
o(n)使用
大哦。
当n>=3时,5n+3因此,如果我们让f(n)=5n+3,g(n)=
n,c=6,n=3,我们已经证明
f(n)=3或5n+3=
o(n)。也就是说,如果一个算法
所需时间与
5n+3,是o(n)。”
好吧,这对我来说很有意义。他们说如果n=3或更大,5n+3比n小于3花费的时间要少,所以5n+n=6n,对吗?有道理,因为如果n是2,5n+3=13,而6n=12,但是当n是3或更大时,5n+3总是小于或等于6n。
这就是我困惑的地方。他们给了我另一个例子:
例2:“让我们证明4n^2+50n
-10=O(n^2)。很容易看出:4N^2+50N-10<=4N^2+50N
对于任何n。自50n<=50n^2对于n
=50,对于n>=50,4n^2+50n-10<=4n^2+50n^2=54n^2。因此,当c=54和n=50时,我们已经证明了4n^2
+50N-10=O(n^2)。”
这句话没有意义:对于n>=50,50n<=50n^2。
难道没有人能使50n小于50n^2吗?不只是大于或等于50?他们为什么提到50n<=50n^2?这和问题有什么关系?
另外,对于n>=50,4n^2+50n-10<=4n^2+50n^2=54n^2也将是真的,不管n是什么。
世界上,采摘数是如何表示f(n)=o(g(n))?
最佳答案
请记住,当n足够大时,你在寻找f(n)上的一个上界。因此,如果你可以证明f(n)小于或等于n的值大于n的一些CG(n),这意味着CG(n)是f(n)的上界,f(n)的复杂性是O(g(n))。
给出的例子旨在表明,给定的函数f(n)在任何n>n的情况下永远不能超过c*g(n)。通过操纵一个初始上界,使其可以更简单地表示(如果4n^2+50n是f(n)上的一个上界,那么4n^2+50n^2也就是,它等于54n^2,这就变成了54*g(n),其中c=54,g(n)=n^2,作者可以证明F(n)是由C*G(n)有界的,它具有O(G(n))的复杂性,因此F(n)也是有界的。