Algorithm 如何找出函数中的大Oh复杂性

Algorithm 如何找出函数中的大Oh复杂性,algorithm,Algorithm,如何确定这两个函数之间的顺序:n^(2.5)&100n^(2/3) 另外,对于日志(n!) 函数没有大O复杂性。Big-O复杂性度量是针对实现函数的算法的 举例来说,这些函数中的每一个(理论上)都可以实现为一个巨大的查找表,这将提供O(1)性能。不太实际。。。但这不是重点 给那些不“明白”的人的提示。您可以使用big-O表示法来描述函数,但这不是函数复杂性的度量。这只是说明函数在大(足够)参数下的行为的一种方式。复杂性是关于计算过程的特征,函数不知道它们是如何计算的。事实上,它们甚至不需要是可计

如何确定这两个函数之间的顺序:
n^(2.5)
&
100n^(2/3)

另外,对于
日志(n!)

函数没有大O复杂性。Big-O复杂性度量是针对实现函数的算法的

举例来说,这些函数中的每一个(理论上)都可以实现为一个巨大的查找表,这将提供
O(1)
性能。不太实际。。。但这不是重点

给那些不“明白”的人的提示。您可以使用big-O表示法来描述函数,但这不是函数复杂性的度量。这只是说明函数在大(足够)参数下的行为的一种方式。复杂性是关于计算过程的特征,函数不知道它们是如何计算的。事实上,它们甚至不需要是可计算的


另一方面,如果这些函数是性能函数,取决于某个参数
n
,您会问如何将它们转换为大O复杂性度量

最好的答案是做数学题。取big-O复杂性的形式定义(可以找到),插入函数
f
并求解
g


如果你的数学技能达不到这一要求,那么另一种选择是获得一些图表纸和计算器,并绘制出当
n
变得非常大时这些函数是如何增长的。但是你需要注意的是,你在观察增长率(不是绝对值),你认为“代码> N< /代码>的值足够大。

< P><强> [编辑] <强> Big-O用于比较算法,用来描述函数的极限行为。

因此,如果给你3个算法的复杂度
O(n^2.5)、O(n^(2/3))和O(logn!)
,来比较这些算法,你会看到它们在
n
非常大的值下的表现。在这种情况下,
n^2.5
大于
n^(2/3)
。因此,
O(n^(2/3))
优于
O(n^2.5)
算法。 对于第三个,我们知道n!logn!。对于非常大的
n
logn
将更接近
nlogn
,因此可以推断
logn!>n^2/3

因此,最终的顺序将是
O(n^2/3)


PS:所有比较都是针对非常大的n值进行的。

选择真正大的数字?这是严格的基于证明的数学作业,还是不太精确的@qwertymk的建议可能对第二个有好处,但第一个可能没有帮助。假设您实际要做的是将这些函数从最简单的到最复杂的排序。Big-O表示函数()。并且可以用于算法。@KarolyHorvath:啊,是的!我的意思是说函数没有大o复杂度。谢谢。如果给出4n^2,log3(n),20n,n^2.5,log(n!),n^n,3^n,n log(n),100n^(2/3),2^n,2^(n+1),n!,(n-1)!,2^2n顺序(其大O复杂性的递增顺序)为log3(n)<20n