Answers:
对于许多算法,有时会出现常数不同的情况,导致数据大小较小时一个或多个常数变快或变慢,并且由于算法复杂性而排序不那么合理。
话虽如此,如果我们仅考虑超大数据大小,即。其中一个最终赢了,那么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时,我只使用了一个值,但是,您可以使用多个值来构建关于函数的直觉