如何确定这两个功能之间的顺序:n^(2.5)
& 100n^(2/3)
另外,对于log(n!)
。
答案 0 :(得分:4)
[编辑] Big-O用于比较算法,用于描述函数的限制行为。
因此,如果您获得3个具有复杂度O(n^2.5), O(n^(2/3)) and O(log n!)
的算法,为了比较这些算法,您会看到它们对非常大的n
值的行为方式。在这种情况下,n^2.5
大于n^(2/3)
。因此,O(n^(2/3))
优于O(n^2.5)
算法。
对于第三个,我们知道n! &LT; n ^ n [1 * 2 * .. * n&lt; n * n * .. * n],所以logn! < nlogn
。对于非常大的n
值,logn!
将更接近nlogn
,因此可以推断出logn! > n^2/3
。
因此,最终订单将为O(n^2/3) < O(logn!) < O(n^2.5)
。
PS:所有比较都是针对非常大的n值。
答案 1 :(得分:3)
功能没有大O复杂性。 Big-O复杂性度量适用于实现函数的算法。
为了说明,这些函数中的每一个都可以(理论上)实现为巨型查找表,并且可以提供O(1)
性能。不完全实用......但这不是重点。
注意那些没有“得到它”的人。 可以使用big-O表示法来表征函数,但不能衡量函数的复杂性。它只是一种说明函数如何对大(足够)参数表现的方式。复杂性是关于表征计算过程的,而函数则与它们的计算方式无关。实际上,它们甚至不需要是可计算的。
另一方面,如果这些函数是性能函数,取决于某些参数n
,并且您正在询问如何将它们转换为大O复杂性度量...
最佳答案是做数学。采用big-O复杂性的正式定义(可以找到here),插入函数f
并求解g
。
如果你的数学技能达不到这一点,那么另一个选择就是获得一些方格纸和一个计算器,并绘制这些函数在n
变得非常大时如何增长。但是你需要注意,你正在考虑增长率(而不是绝对值),并且你认为n
的值足够大。