我懂得如何计算函数的复杂性。这同样适用于确定数学函数的增长顺序。[我可能没有我想的那么理解它,这就是为什么我可能会问这个]例如:
an^3 + bn^2 + cn + d可以用大O表示法写成O(n^3),因为对于足够大的n而言,bn^2 + cn + d项的值与an^3相比是微不足道的(常数系数a、b、c和d也被省略,它们对值的贡献也变得微不足道)。
我不明白的是,当领导任期涉及到某种分工时,这是如何运作的例如:
a/n^3 + bn^2n^3/a + bn^2
设n=100,a=1000,b=10为前一个公式,那么我们得到
n^3/a = 100^3/1000 = 1000bn^2 = 10*100^2 = 100,000
或者对后者来说更具戏剧性的是——在这种情况下,领先的任期不仅像上面那样增长缓慢,而且还在萎缩,不是吗?以下内容:
a/n^3 = 1000/100^3 = 0.001bn^2 = 100,000如上。
在这两种情况下,第二项的贡献要大得多,那么,决定增长顺序的不是n^2吗?
当前导项后面跟着减法(a/n^3 - bn^2)或第二项也是除法(n^3/a + n^2/b))或两者都是除法但顺序是混合的(a/n^3 + n^2/b)时,情况就变得更加复杂(至少对我来说)。
这个列表似乎没完没了,所以我的一般问题是,如何理解和处理涉及除法(和减法)的公式,以确定给定函数的增长顺序?

最佳答案

除法只是乘以multiplicative inverse,所以n^3/a == n^3 * a^-1,你可以像处理其他系数一样处理它。
关于减量a*n^3 - b*n^2 <= a*n^3,它也在O(n^3)中另外,a*n^3 - b*n^2 >= a/2 * n^3对于足够大的n值,它也在Omega(n^3)中有关减量的更详细解释,请参见:Algorithm complexity when faced with substraction in value
大O符号通常用于增加(不必是单调的)函数,而像a/n这样的减少函数并不适合它,尽管O(1/n)似乎仍然定义得很好,AFAIK,而且它是O(1)的子集(除非只考虑离散函数)然而,这对于算法的分析几乎没有价值,因为算法的复杂性不能真正缩小。

10-08 04:05