Answers:
如果仅绘制几个图形,您的状态就会很好。Wolfram Alpha是进行此类调查的重要资源:
通过此链接生成。请注意,在图中,log(x)是自然对数,这就是一个图的方程式看起来有点有趣的原因。
对于许多算法,有时会出现常数不同的情况,导致数据大小较小时一个或多个常数变快或变慢,并且由于算法复杂性而排序不那么合理。
话虽如此,如果我们仅考虑超大数据大小,即。其中一个最终赢了,那么O(n^f)
是不是快O(n/log n)
了0 < f < 1
。
算法复杂度的很大一部分是确定哪种算法最终更快,因此通常知道O(n^f)
比O(n/log n)
for 更快0 < f < 1
。
一个通用规则是,log n
与n^f
任何一个乘(或除)相比,乘(或除)最终将可以忽略不计f > 0
。
为了更清楚地说明这一点,让我们考虑随着n的增加会发生什么。
n n / log n n^(1/2)
2 n/ 1 ?
4 n/ 2 n/ 2
8 n/ 3 ?
16 n/ 4 n/ 4
64 n/ 6 n/ 8
256 n/ 8 n/16
1024 n/10 n/32
注意哪个下降更快?这是n^f
专栏。
即使f
接近1,该n^f
列的启动也会变慢,但是当n翻倍时,分母的变化速率会加快,而该n/log n
列的分母似乎会以恒定的速率变化。
让我们在图形上绘制一个特殊情况
资料来源:Wolfram Alpha
我所选择O(n^k)
,使得k
很接近1(处0.9
)。我还选择了常量,因此起初O(n^k)
速度较慢。但是,请注意,它最终最终“获胜”,并且花费的时间少于O(n/log n)
。
比较运行时间时,使用大的n值进行比较总是有帮助的。对我来说,这有助于建立关于哪个功能较慢的直觉
在您的情况下,请考虑n = 10 ^ 10和a = .5
O(n/logn) = O(10^10/10) = O(10^9)
O(n^1/2) = O(10^10^.5) = O(10^5)
因此,O(n ^ a)比O(n / logn)快,当0 <a <1时,我只使用了一个值,但是,您可以使用多个值来构建关于函数的直觉