微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

渐近符号图的说明

如何解决渐近符号图的说明

我目前正在学习算法课程,并且遇到了下图

enter image description here

我很难理解 f(n)的含义, g(n)的含义以及 c 和 n0 平均值。此外,我想知道它们与界限的概念之间的关系以及这意味着什么。

大多数教程只是从解释以上术语的关联开始,而不是它们的含义

解决方法

想象一下您编写了一个对列表进行排序的程序。您的程序输入一个列表,执行一段时间,然后输出一个排序的列表。

“大O”符号f(n) = O(g(n))是比较两个函数fg的一种方式。

在处理数字时,您习惯于立即对“ x

在处理函数时,我们有几种不同的比较方法。例如,您可以说“函数f总是小于函数g”,然后正式写成:“ forall n,f(n)

但是,这种比较有点极端。在问题中显示的图表上,紫色功能并不总是小于蓝色功能。但是您会注意到,它仅对于n的几个小值才更大。因此说“在几个初始值之后,函数f最终变得小于函数cg”或正式地“存在一个数字n0使得所有n> n0,f(n)

现在,我们最初想要比较的函数是f和g,而不是f和cg。但是,也许我们不关心乘法常数。也许我们只关心当n增加时f(n)的行为,以及当n增加时g(n)的行为。例如,也许您注意到当n大10倍时,f(n)大约大100倍。这意味着f(n)大致与n ^ 2成比例。对于我们来说,f大约等于n ^ 2 + 5还是等于7 * n ^ 2 + 2 * n + 12对我们来说都没有关系。对我们来说重要的是,它大约与n ^ 2成比例。

因此,Big-O表示法为我们提供了一种比较两个函数f(n)和g(n)的方法,而忽略了乘法常数,而忽略了n的小值的f(n)和g(n)的值。 / p>

f(n) = O(g(n))在字面上是“存在一个值n0和一个乘法常数c,使得只要n大于n0,f(n)就会小于c g(n)

此定义与算法的复杂性分析有关。假设您已经编写了一种对列表进行排序的算法。让我们将f(n)称为算法对n个项目的列表进行排序所需的最大操作数。您想证明您的算法是有效的。您想制作诸如“ f(n)= O(n ^ 2)”之类的语句,这大概意味着“如果列表大小乘以10,则执行时间将乘以小于100” 。这不能给出精确的操作次数-也许f(n)= 4 n ^ 2,或者f(n)=(n ^ 2- n)/2。但是谁在乎呢?确切的数字。重要的是,如果列表长10倍,则执行时间最多将长100倍。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。