Algorithm 渐近符号图的解释

Algorithm 渐近符号图的解释,algorithm,time-complexity,complexity-theory,Algorithm,Time Complexity,Complexity Theory,我目前正在学习一门算法课程,我遇到了下图 我很难理解f(n)代表什么,g(n)意味着什么,以及c和n0意味着什么。此外,我想知道它们是如何与边界概念相关的,以及这意味着什么 大多数教程一开始只是解释上述术语是如何关联的,而不是它们的含义想象一下您编写了一个程序来对列表进行排序。您的程序输入一个列表,执行一段时间的计算,然后输出一个排序的列表 “big-O”表示法f(n)=O(g(n))是比较两个函数f和g的一种方法 在处理数字时,您习惯于进行比较,例如“x

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

我很难理解f(n)代表什么,g(n)意味着什么,以及cn0意味着什么。此外,我想知道它们是如何与边界概念相关的,以及这意味着什么


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

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

“big-O”表示法
f(n)=O(g(n))
是比较两个函数
f
g
的一种方法

在处理数字时,您习惯于进行比较,例如“x 在处理函数时,我们有几种不同的比较方法。例如,你可以说“函数f总是比函数g小”,你可以这样正式地写:“forall n,f(n) 然而,这种比较有点极端。在您的问题中显示的图表上,紫色函数并不总是小于蓝色函数。但您可以注意到,它只在n的几个小值中更大。所以说“在几个初始值之后,函数f最终变得比函数cg小”或者正式地说“存在一个数字n0,使得对于所有n>n0,f(n) 现在,我们最初想要比较的函数是f和g,而不是f和cg。然而,也许我们不关心乘法常数;也许我们只关心f(n)在n增加时的行为,以及g(n)在n增加时的行为。例如,你可能注意到,当n是10倍大时,f(n)大约是100倍大。这意味着f(n)大致与n^2成正比。对于我们来说,f是等于n^2+5还是等于7*n^2+2*n+12并不重要。对我们来说重要的是,它大致与n^2成正比

所以大O表示法给了我们一种比较两个函数f(n)和g(n)的方法,同时忽略了乘法常数,忽略了f(n)和g(n)的值,对于小的n值

f(n)=O(g(n))
通常意味着“存在一个值n0和一个乘法常数c,只要
n
大于n0,
f(n)
就会小于
cg(n)

此定义与算法的复杂性分析相关。假设您编写了一个对列表进行排序的算法。让我们调用f(n)对
n
项列表进行排序时,您的算法所需的最大操作数。您想证明您的算法是有效的。您想做出诸如“f(n)=O(n^2)之类的陈述,这大致意味着“如果列表的大小乘以10,那么执行时间将乘以不到100”。这并没有给出确切的运算次数——可能是f(n)=4n^2,或者可能是f(n)=(n^2-n)/2。但谁在乎确切的数字呢。重要的是,如果列表长10倍,则执行时间最多将长100倍