Big o 渐近符号:(an+b)∈ O(n^2)

Big o 渐近符号:(an+b)∈ O(n^2),big-o,asymptotic-complexity,Big O,Asymptotic Complexity,当我在读托马斯·H·科尔曼的《算法简介》时,我在渐近符号中遇到了这句话 当a>0时,任何线性函数a+b都在^2上,这基本上是通过取c=a+| b |和no=max1,-b/a来验证的 我不明白为什么在^2上而不是在。什么时候上限会失效 例如,根据书中所述,对于3n+2 3n+2 <= (5)n^2 n>=1 但这也有好处 3n+2 <= 5n n>=1 那么,为什么n^2的上限是?我找到了这本书的相关部分。事实上,这段摘录来自介绍大O符号及其相关的章节 b

当我在读托马斯·H·科尔曼的《算法简介》时,我在渐近符号中遇到了这句话

当a>0时,任何线性函数a+b都在^2上,这基本上是通过取c=a+| b |和no=max1,-b/a来验证的

我不明白为什么在^2上而不是在。什么时候上限会失效

例如,根据书中所述,对于3n+2

3n+2 <= (5)n^2    n>=1
但这也有好处

3n+2 <= 5n    n>=1

那么,为什么n^2的上限是?

我找到了这本书的相关部分。事实上,这段摘录来自介绍大O符号及其相关的章节

big-O的形式定义是,所讨论的函数的渐近增长速度不超过比较函数。它没有说明函数是否会逐渐变慢,因此:

fn=n是On,On^2,也是Oe^n,因为n的渐进增长速度并不比其中任何一个都快。但n不在O1中

On中的任何函数也位于On^2和Oe^n中

如果你想描述紧渐近界,你可以使用big-Θ符号,这是在书中big-O符号之前介绍的。fn∊ Θgn意味着fn的渐进增长速度并不比gn快,反之亦然。所以fn∊ Θgn等于fn∊ Ogn和gn∊ Ofn

所以fn=n在Θn中,但不在Θn^2或Θe^n或Θ1中

另一个例子:fn=n^2+2在^3上,但不在Θn^3上,它在Θn^2上

你需要想一想。。。作为一个集合,这就是为什么使用符号的集合论元素。Ogn是所有函数的集合,这些函数的渐进增长速度不快于gn,而Θgn是既不快于gn,也不慢于gn的函数集合。所以逻辑上的结果是,Θgn是Ogn的子集

经常使用=代替∊ 符号,这确实是误导。它是纯符号,不与实际值=共享任何属性。例如1=O1和2=O1,但不是1=O1=2。最好避免在big-O符号中使用=。尽管如此,您稍后将看到=符号非常有用,例如,如果您想表示rest项的复杂性,例如:fn=2*n^3+1/2*n-sqrtn+3=2*n^3+On,这意味着函数的行为类似于2*n^3,被忽略的部分的增长速度不会超过n


所有这些都有点违背了big-O符号的典型用法。您经常会发现由它定义的算法的时间/内存复杂性,而实际上它应该由大Θ符号定义。例如,如果在^2上有一个算法,在On上有一个算法,那么第一个算法实际上仍然可以渐进地更快,因为它也可能在Θ1中。其原因有时可能是紧Θ界不存在或给定算法未知,因此至少big-O可以保证事情不会超过给定的界。按照惯例,你总是尝试给出已知的最小的大O型装订,而这在形式上是不必要的。

我找到了这本书的相关部分。事实上,这段摘录来自介绍大O符号及其相关的章节

big-O的形式定义是,所讨论的函数的渐近增长速度不超过比较函数。它没有说明函数是否会逐渐变慢,因此:

fn=n是On,On^2,也是Oe^n,因为n的渐进增长速度并不比其中任何一个都快。但n不在O1中

On中的任何函数也位于On^2和Oe^n中

如果你想描述紧渐近界,你可以使用big-Θ符号,这是在书中big-O符号之前介绍的。fn∊ Θgn意味着fn的渐进增长速度并不比gn快,反之亦然。所以fn∊ Θgn等于fn∊ Ogn和gn∊ Ofn

所以fn=n在Θn中,但不在Θn^2或Θe^n或Θ1中

另一个例子:fn=n^2+2在^3上,但不在Θn^3上,它在Θn^2上

你需要想一想。。。作为一个集合,这就是为什么使用符号的集合论元素。Ogn是所有函数的集合,这些函数的渐进增长速度不快于gn,而Θgn是既不快于gn,也不慢于gn的函数集合。所以逻辑上的结果是,Θgn是Ogn的子集

经常使用=代替∊ 符号,这确实是误导。它是纯符号,不与实际值=共享任何属性。例如1=O1和2=O1,但不是1=O1=2。最好避免在big-O符号中使用=。尽管如此,您稍后将看到=符号非常有用,例如,如果您想表示rest项的复杂性,例如:fn=2*n^3+1/2*n-sqrtn+3=2*n^3+On,这意味着函数的行为类似于2*n^3,被忽略的部分的增长速度不会超过n

所有这些都是
有点违背了big-O符号的典型用法。您经常会发现由它定义的算法的时间/内存复杂性,而实际上它应该由大Θ符号定义。例如,如果在^2上有一个算法,在On上有一个算法,那么第一个算法实际上仍然可以渐进地更快,因为它也可能在Θ1中。其原因有时可能是紧Θ界不存在或给定算法未知,因此至少big-O可以保证事情不会超过给定的界。按照惯例,你总是试图给出已知的最小的大O边界,而这在形式上是不必要的。

维基百科对大O符号的正式定义是:

fx=Ogx为x→ ∞

当且仅当存在一个正常数M,使得 足够大的x值,fx最多为M乘以gx 绝对值。也就是说,fx=Ogx当且仅当存在 一个正实数M和一个实数x0

|外汇|≤ M | gx |对于所有x>x₀ 对于足够大的x的平均值

在我们的例子中,我们可以很容易地证明这一点

|an+b |<| an+n |表示n足够大,即当n>b时

然后| an+b | 因为a+1是常量,在形式定义中对应于M,所以肯定

A+b=On


你的质疑是对的。

维基百科对大O符号的正式定义是:

fx=Ogx为x→ ∞

当且仅当存在一个正常数M,使得 足够大的x值,fx最多为M乘以gx 绝对值。也就是说,fx=Ogx当且仅当存在 一个正实数M和一个实数x0

|外汇|≤ M | gx |对于所有x>x₀ 对于足够大的x的平均值

在我们的例子中,我们可以很容易地证明这一点

|an+b |<| an+n |表示n足够大,即当n>b时

然后| an+b | 因为a+1是常量,在形式定义中对应于M,所以肯定

A+b=On


你的怀疑是对的。

这本书还说^2上的2n^2=装订很紧,而^2上的2n=装订不紧。他们使用=而不是∈ 由于尚未解释的原因,他们说稍后会解释。如果“a”上没有界,那么对我来说是有意义的。@MartinSerrano如果a上没有界,它将在*a或^2*a上,但不是在^2上。@MartinSerrano因为a不是n的函数,我们可以假设它是一个常数。这本书还说,^2上的2n^2=界是紧的,而^2上的2n=界不是紧的。他们使用=而不是∈ 由于尚未解释的原因,他们说稍后会解释。如果“a”上没有界,那么对我来说是有意义的。@MartinSerrano如果a上没有界,它将在*a或^2*a上,但不是在^2上。@MartinSerrano因为a不是n的函数,有人会假设它是一个常数。“On中的任何函数也在On^2和Oe^n中。”我不同意这一点,或者我遗漏了一些东西。@Vincent Zgueb从你的答案中得到定义。假设fx在Ox中,那么有一个x|0和M,因此对于所有x>x|0:| fx | x|1:| fx |我同意,如果函数在On中,那么它也在On^2中,但它在书中写的方式有点误导,我认为它们意味着a+b不在On中。你能解释一下什么是在^2上的2n^2=紧而在^2上的2n=不紧吗?它是用小符号表示的。是因为,2n=On很紧吗?@Sourabh这句话的措辞可能有点不吉利,但作者的全部观点是要表明,a+b在^2上,他写道,这可能令人惊讶,他在^2上从未提及。你认为从“^2”中的A+b可以推断出“^2”中的A+b不在“^2”中,这正是他想要表达的误解。你把我和小o和大o符号搞混了。如果^2是小号的,请写在上面好吗?2n=on^2是真的,而2n=on不是真的,但是2n=on和2n=Thetan。因此,gn=n是紧渐近的,与fn=2n上的常数因子有关。不,它说2n^2=on^2是紧的,而2n=on^2并不都是大O。on中的任何函数也在on^2和Oe^n中。“我不同意这一点,或者我遗漏了一些东西。@Vincent Zgueb从你的答案中得到定义。假设fx在Ox中,那么有一个x|0和M,因此对于所有x>x|0:| fx | x|1:| fx |我同意,如果函数在On中,那么它也在On^2中,但它在书中写的方式有点误导,我认为它们意味着a+b不在On中。你能解释一下什么是在^2上的2n^2=紧而在^2上的2n=不紧吗?它是用小符号表示的。是因为,2n=On很紧吗?@Sourabh这句话的措辞可能有点不吉利,但作者的全部观点是要表明,a+b在^2上,他写道,这可能令人惊讶,他在^2上从未提及。你认为从“^2”中的A+b可以推断出“^2”中的A+b不在“^2”中,这正是他想要表达的误解。你把我和小o和大o符号搞混了。如果^2是小号的,请写在上面好吗?2n=on^2是真的,而2n=on不是真的,但2n=on和2n=Th 伊坦。因此,gn=n是紧的渐近界,与fn=2n上的常数因子有关。不,它说,在^2上的2n^2=n是紧的,而在^2上的2n=n并不都是大O