我正在为我的Java III课阅读一本教科书。我们正在阅读关于Big-Oh的内容,我对其正式定义感到有些困惑。
形式定义:“函数f(n)最多为g(n) - 即f(n)= O(g(n)) - 如果存在正实数c和正整数N这样,对于所有n> = N,f(n)< = cg(n)。即,当n足够大时,cg(n)是f(n)的上限。“
好的,这是有道理的。但请继续阅读......这本书给了我这个例子:
“在第9.14段,我们说过 使用5n + 3操作的算法 是O(n)。我们现在可以证明5n + 3 = O(n)使用正式定义 大哦。
当n> = 3时,5n + 3 <= 5n + n = 6n。 因此,如果我们让f(n)= 5n + 3,则g(n)= n,c = 6,N = 3,我们已经证明了这一点 f(n)&lt; = 6g(n),n> = 3,或5n + 3 = 上)。也就是说,如果算法 要求时间与...成正比 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。因为n
50n≤= 50n ^ 2对于n> = 50,= 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&lt; = 50n ^ 2。
是不是要让50n小于50n ^ 2?不只是大于或等于50?为什么他们甚至提到50n <= 50n ^ 2?这与问题有什么关系?
此外,无论n是多少,对于n> = 50,4n ^ 2 + 50n-10≤4n^ 2 + 50n ^ 2 = 54n ^ 2都是正确的。
世界上拣选数字如何显示f(n)= O(g(n))?
答案 0 :(得分:5)
请记住,当n足够大时,你正在寻找“f(n)的上限。”因此,如果对于n大于N的值,可以证明f(n)小于或等于某个c g(n),这意味着c g(n)是上限因此,f(n)和f(n)的复杂度为O(g(n))。
给出的例子旨在表明,对于任何n> 1,给定函数f(n)永远不会超过c * g(n)。 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)也是如此。
答案 1 :(得分:2)
50n <= 50n^2 for n >= 50
因为如果n是50,那么50n与n ^ 2相同,因为50 * 50等于50 ^ 2。
将n^2
替换为50n
我们得到
n^2 <= 50n^2 for n >= 50
这很明显。
答案 2 :(得分:2)
关于挑选数字的全部内容就是:为了让它变得更容易。因为你可以为N和c选择你想要的任何数字,所以作者只选择了一些最容易看到的东西。这也是你也可以做的(写考试时等)。
因此虽然通常可以使用较小的N,但推理会变得有点困难(通常需要一些先前的分析知识 - 我们几年前都学过,x不会像x ^ 2 ......但是你想写下分析证明吗?)
保持简单,是消息:-)一开始习惯这个有点奇怪。
答案 3 :(得分:0)
对于n> = 50,他们说50n≤50n^ 2的原因可能是如果n小于1,则n ^ 2 我可以看出为什么说n> = 50的50n&lt; = 50n ^ 2可能看起来有点傻了。但它仍然是真的。该书并未说50n&lt; = 50n ^ 2仅适用于n> = 50;这将是错误的。 作为一个类比,如果我说“我所有的兄弟姐妹都说英语”,即使有很多说英语的人不是我的兄弟姐妹,也是如此。 关于证据,我们可能将其分成不同的陈述。 应该清楚的是,这些陈述中的每一个都是真的,要么是单独的(1,2,3),要么是前面陈述的结果。 (1): 4n^2 + 50n - 10 <= 4n^2 + 50n (for all n)
(2): 4n^2 + 50n <= 4n^2 + 50n^2 (for all n>=50)
(3): 4n^2 + 50n^2 = 54 n^2 (for all n, including all n>=50)
(4): Therefore, 4n^2 + 50n - 10 <= 54n^2 for all n>=50
(5): Therefore, for f(n)=4n^2 + 50n - 10, g(n)=n^2, N=50, and c=54,
the statement f(n) <= c g(n) for all n >= N is true
(6): Therefore, by definition 4n^2 + 50n - 10=O(n^2).
答案 4 :(得分:0)
正式定义:
正如您所注意到的那样略有不同:)