Big o 是什么使两个函数在大O表示法中具有根本不同的效率时间

Big o 是什么使两个函数在大O表示法中具有根本不同的效率时间,big-o,calculus,processing-efficiency,Big O,Calculus,Processing Efficiency,今天,我被提出了一个问题:根据效率对几个函数进行排序,并从数学上计算哪些函数具有相同的大O符号。长话短说,我最终与我的同学就运行时间为2^n的函数与运行时间为n^(n/2)的函数之间是否存在根本性差异产生了分歧 有人告诉我,在大O表示法中,当n接近无穷大时,前导系数最终变得无关紧要,因为它们只是同一父函数的垂直标度,当n很大时,6*n实际上与n没有太大区别,因为它们都有相同的父增长率,这是有意义的。我的论点是,因为函数的这种垂直缩放是无关紧要的,因为它只是同一事物的子函数,所以所做的任何常量转换

今天,我被提出了一个问题:根据效率对几个函数进行排序,并从数学上计算哪些函数具有相同的大O符号。长话短说,我最终与我的同学就运行时间为2^n的函数与运行时间为n^(n/2)的函数之间是否存在根本性差异产生了分歧

有人告诉我,在大O表示法中,当n接近无穷大时,前导系数最终变得无关紧要,因为它们只是同一父函数的垂直标度,当n很大时,6*n实际上与n没有太大区别,因为它们都有相同的父增长率,这是有意义的。我的论点是,因为函数的这种垂直缩放是无关紧要的,因为它只是同一事物的子函数,所以所做的任何常量转换都将保留整个父函数,因此子函数将具有相同的基本增长率,并最终简化为相同的表示法(在本例中为O(2^n))

我的同学指出

2^(n/2) = (2^(1/2))^n = sqrt(2)^n
…因为当n接近无穷大时,1.414^n比2^n小得多,所以它应该大得多

然后,我的同学提出,如果

lim((f(n)'s efficiency)/(g(n)'s efficiency)) as n->infinity 
    is either infinity (f(n) is bigger), or 0 (g(n) is bigger)

And because ((2^n) / (2^(n/2))) = ((2^(n/2) * 2^(n/2)) / (2^(n/2))) = 
    2^(n/2), approaches infinity, they must have a rate of change that is
    fundamentally different.
我同学的理论使两个算法具有不同的大O符号,这对于线性与线性、线性与二次以及几乎任何其他常见情况都是有意义的,但我的理论也是如此。转换后的线性函数(意味着它被垂直或水平平移或缩放,但不被负数、零等缩放)将始终具有O(n)的大O符号,因为它是线性的。任何二次函数最终都将是O(n^2),因为常数将变得无关紧要,只有n^2项才重要,因为它是一个变换的二次函数。(也适用于其他东西,你明白了)显然,x^2与x^3根本不同,因为你无法缩放二次函数以匹配三次函数,所以它们必须足够不同,才能在大O中获得自己的类别

显然[至少]我们中有一个人的想法是错误的。我的意思是,要么O(2^(n/2))被简化为O(2^n),要么它没有,对吗

那么,我们中的哪一个(如果其中一个)是对的,为什么另一个是错的,最重要的是,我们如何判断在这样的情况下,两种效率低下是不是根本不同


谢谢

您最初的问题比较了2^n和n^(n/2)。很容易看出,n^(n/2)比n^(n/2)慢,因为在n=4时,它们相等(16),从这一点上看,n^(n/2)越来越大

2^(n/2)比这两者都小。实际上,其中c是常数,nc是n*a常数,nc^c
在2^n对2^(n/2)的情况下,2^n有一个更大的O,因为没有常数能使2^(n/2)随着n的增加而跟上它。

你最初的问题比较了2^n和n^(n/2)。很容易看出,n^(n/2)比n^(n/2)慢,因为在n=4时,它们相等(16),从这一点上看,n^(n/2)越来越大

2^(n/2)比这两者都小。实际上,其中c是常数,nc是n*a常数,nc^c 在2^n对2^(n/2)的情况下,2^n有一个更大的O,因为没有常数可以使2^(n/2)随着n的增加而跟上它