为什么:
O(3n)=O(2n)=O(n)
而他们的衍生物w.r.t n分别为3,2和1
答案 0 :(得分:1)
渐近符号与衍生物无关。它实际上是衡量w.r.t功能增长的标准。大小因此,它告诉我们如何在更改n的值时更改函数。如果两个函数在以相同的方式改变n时以相同的方式改变,我们将它们称为相同顺序的函数。
例如,
设f(n)= 3n 2 + n + 1和g(n)= 5n 2 + 3n + 1
如果我们将n加倍,两个函数将大致得到之前值的4倍。因此它们都是有序O(n 2 )。我们删除了Big-oh表示法中的常系数(5和3),因为它们没有说明函数如何增长w.r.t. n(在每种情况下,函数将获得4次)。然而,我们没有删除常数2(n的幂或指数),因为它有助于说明函数如何增长w.r.t. n(如果我们删除了那个常量,我们的函数会得到两次而不是4次因此我们知道它有贡献)。
正式地,我们将Big-Oh表示法定义如下:
见这里:Definition of Big O notation
f(n)=O(g(n)), if and only if f(n)<=c.g(n) for some c>0 and n>=n0
现在让我告诉你O(3n)= O(2n)= O(n)
非正式证明:
f(n)= 2n且g(n)= 3n都将线性地生长w.r.t. ñ。线性地,我的意思是如果我们将n加倍/减半,则函数输出也将加倍/减半。如果我们将系数改为2,3或1000,它将无关紧要,它将线性增长w.r.t n。所以,这就是O(n)= O(2n)= O(3n)的原因。请注意,它不是关于去除常数,而是关于这些常数是否有助于说明我们的函数如何增长w.r.t. ñ。
作为反例,我们假设为
f(n)= 2 n 和
g(n)= 2 2n
我们不能删除指数中的2,因为2表示贡献并且说g(n)实际上将以平方w.r.t的形式改变。 f(n)将如何变化。所以,f(n)= O(2 n )
而g(n)= O(4 n )
正式证明:
Suppose n is sufficiently large
if f(n)=O(n), g(n)=O(2n) and h(n)=O(3n) then
f(n)<=c1n for some c1>0
g(n)<=2c2n for some c2>0, let's have c3=2c2 hence g(n)<=c3n or g(n)=O(n) or O(2n)=O(n)
Similarly h(n)<=3c4n or h(n)=O(n) or O(3n)=O(n)
Hence, O(3n)=O(2n)=O(n)
最后的话:
关键是检查功能的增长方式。练习之后,你会有一些想法,比如 p + bn p-1 + ... + c = O(n p < / sup>)以及更多。
阅读CLRS Book。我不记得确切,但我认为第3章专门用于这个概念。