Algorithm 函数的渐近增长

Algorithm 函数的渐近增长,algorithm,computer-science,complexity-theory,Algorithm,Computer Science,Complexity Theory,如何确定给定的fn和gn是θ,ω,大ω,小ω,还是小ω? -我认为一种方法是绘制函数fn和gn的图形。即使通过绘制图表,我们怎么说fn在θ,ω,大ω,小ω,还是小ω?我不清楚。有人能提供更多的细节吗 我也不确定这是不是正确的方法。有谁能告诉我还有没有其他更简单的方法。 举个例子:fn=sq rootn和gn=n^sin n下面是使用极限计算给定fn和gn的Big-O的方法 在同一组轴上绘制fx和gx的大x值函数应有助于您立即识别渐近行为。首先,您需要了解所调用函数的复杂性。这可能会被记录下来,但

如何确定给定的fn和gn是θ,ω,大ω,小ω,还是小ω? -我认为一种方法是绘制函数fn和gn的图形。即使通过绘制图表,我们怎么说fn在θ,ω,大ω,小ω,还是小ω?我不清楚。有人能提供更多的细节吗

我也不确定这是不是正确的方法。有谁能告诉我还有没有其他更简单的方法。
举个例子:fn=sq rootn和gn=n^sin n

下面是使用极限计算给定fn和gn的Big-O的方法


在同一组轴上绘制fx和gx的大x值函数应有助于您立即识别渐近行为。

首先,您需要了解所调用函数的复杂性。这可能会被记录下来,但在可能不是的情况下,您必须查看这些函数的源代码


在这个简单的例子中,您可以计算嵌套循环的数量,以了解事情需要多长时间。如果在从1到t的循环中有一个从1到n的循环,并且只有在内部调用的函数需要恒定的时间,或者只在内部进行算术运算,比如说,这就是t。如果你碰巧知道t你不能通过观察它来确定渐近增长。对于每种类型的渐近增长关系都有正式的定义,可以准确地解释它们的含义。通过从数学上确定两个函数是否满足关系的形式定义,可以确定它们是否适合给定的关系

例如,Big-O的几个等价形式定义之一如下:

f=Og当且仅当lim[n->inf]fn/gn 例如,如果fn=n,gn=n^2,可以观察到极限为n->n/n^2的无穷大=0,因此f=Og

或者,如果fn=n和gn=2n,您可以观察到,作为n->inf,n/2n->1/2 但是,如果fn=n和gn=sqrtn,您可以观察到极限为n->n的无穷大/sqrtn=infinity,因此f!=奥格

你的例子f和g很难理解,因为随着n的增加,正弦在-1和1之间振荡。但是Wolfram Alpha告诉我所讨论的极限是无穷大,所以sqrtn!=关于^ sinn

每个渐近增长关系都有一个类似的形式定义,您可以测试这两个函数是否满足它

编辑:

看起来你在寻找经验法则。这里有一个快速简单的方法来确定相对简单的函数f和g的渐近阶。考虑每个函数中n的最高幂:

如果最高功率相同,则f=Og,g=Of,f=Omegag,g=Omegaf,f=Thetag,g=Thetaf 如果f中的最高功率小于g中的最高功率,则f=Og,f=Og,g=Omegaf,g=Omegaf 如果f中的最高功率大于g中的最高功率,则f=Omegag,f=Omegag,g=Of,g=Of 当然,如果函数不是n中的多项式,或者更复杂,并且不容易确定最高幂是什么,例如,使用正弦的示例,您仍然需要返回到形式定义

有些事情总是正确的:

θ的定义是O和ω的结合。f=Og^f=Omegag f=Thetag[其中^表示逻辑and] 小关系比大关系强。这意味着f=og=>f=og和f=omegag=>f=omegag,但反向方向不正确。
从理论上讲,绘制函数图是不够的。尽管绘制了一张图表,然后根据它进行推理。而且,实际上,如果您将其绘制为足够大的值,则应该足够了

正确的方法是构造一个证明:

当存在正K和n0时,函数fn为Ogn,使得每n>n0,函数fn 让我们假设fn=sqrtn和gn=n^sinn以及一些K和n0都是这样。 现在考虑N1 比这个n0大 大于1 大于K² 方程gn1=1适用的 满足这些条件的数字是无穷多的:当sinn1=0时,gn1=1,即对于任何整数a,n1=a×π。将它们限制为n1>maxn0,1,K²仍然会留下无限多的可能性,所以我们选择一个

我们得到了gn1=1。fn1的价值是多少?这就是sqrtn1,它比K大,因为n1>K²


让我们把它放在一起:K这就是问题所在。@svick:不,我的意思是,如果函数f调用f1和f2,您需要知道或确定f1和f2的复杂性。在第二段中,我非常简短地详细描述了确定复杂性的基本原理——对于一个如此广泛的问题,这几乎是我所能做的。实际上,我在这里只处理函数。我知道自己在做什么
它来自循环,但我这里的问题是计算函数的渐近符号。比如说fn=5n+1^4-n^2 gn=n+5^4+n+10^2。对于这样复杂的函数,我们怎么能说它在θ,大的oh,ω,小的o,小的ω中呢?用字号大小的输入,它们都是O1。对于多精度输入,数字可能会变得任意大,这取决于用于加法和加电的算法。如果使用标准教科书方法,将n和m相乘,其中n和m是正整数,取m*logn,相加取m+logn。对于平方和倍频,符号^2n和符号n。因此,在这种情况下,你的例子将是图表^2n。如果你使用更先进的算法,它可以更快地处理大的输入。@Charles:他说的不是计算这些函数的复杂性,而是函数本身的复杂性。我想你指的是L Hospitals规则。我认为对于Big-O,他们提到的条件是limx->infinityfx/gx=0这是小O的定义。Big-O只要求极限是有限的——它可以大于零。但如果我想避免那些数学计算,并且我更喜欢绘制图形,我能对所有5个渐近符号θ、大O、ω、小O和小ω都这样做吗?如果是的话,我如何从图中计算出来。我假设如果fn大于gn,那么它应该是ω和小ω。同样,如果fn低于gn,那么它就是大oh和小o。对吗?但是我不确定θ。我已经看过了所有5个函数的形式定义,我完全理解了上面描述的更简单的函数,fn=n,gn=n^2。但是我不理解的是复杂的函数,比如说1fn=5n+1^4-n^2gn=n+5^4+n+10^2 nlogn^2,n^2logn3 1/sq rootn,1/logn43^n+4n-17*n/17+6,3^n+3第一个例子很简单,可以使用我给出的经验法则。fn中的最高功率是4,gn中的最高功率也是4,因此f是Og、Omegag和Thetag。在第二个和第三个例子中,不清楚所涉及的最高幂是多少,因此必须取两个函数的比率并计算它们的极限。停止对抗不可避免:如果你想在更复杂的函数上计算渐近增长关系,你必须计算极限。这是没有办法的。如果你不知道如何计算极限,找一个微积分文本。如果我把上面的1推到这个1fn=5n+1^4.1-n^2gn=n+5^4+n+10^2,对于43^n+4n-17*floorn/17+6,3^n+3,它显然是一个指数函数。fn是n+4的幂,gn是n+3的幂,所以我想我们可以说,对于n的任何值,fn的增长速度都比gn快。因此fn=wgn和Omegagn。你同意吗?对于big oh来说,条件应该是fn,不管是否合适,我明白你的意思。然而,我不认为我清楚地理解你上面提到的关于fn的证明解释=奥根。你能详细说明你的理由吗=Ogn?对不起,证据中有一个错误:我忘了解释K。我还试图让它更清楚。现在好点了吗?