为什么O(n)优于O(nlog(n))?

时间:2019-06-08 12:34:44

标签: algorithm data-structures time-complexity big-o

我只是遇到了这个奇怪的发现,在正常的数学中,n * logn小于n,coz log n始终小于1。 那么为什么O(nlog(n))大于O(n)? (即为什么nlogn被认为比n花更多的时间)

Big-O是否采用其他系统?

8 个答案:

答案 0 :(得分:6)

绘制两个图(在desmos(https://www.desmos.com/calculator)或任何其他网络上),并在大n值(y = f(n))上查找结果。我是说您应该寻找较大的值,因为对于较小的n值,程序将没有时间问题。为了方便起见,我在下面附上了一个图表,您可以尝试使用其他日志基础。 enter image description here

红色代表时间= n,蓝色代表时间= nlog(n)。

答案 1 :(得分:4)

那不是事实。 log b n > 1表示 n > b 。例如,log 2 32 = 5。

答案 2 :(得分:0)

此图可能会有所帮助。 log(n)的上升速度快于n,并且大于n的对数大于n则大于1。 https://stackoverflow.com/a/7830804/11617347

答案 3 :(得分:0)

如果n大于b,

Log(n)可以大于1。但这并不能回答您为什么O(n * logn)大于O(n)的问题。

通常,底数小于4。因此,对于更高的n,n * log(n)会大于n。这就是为什么O(nlogn)> O(n)。

答案 4 :(得分:0)

原来,我误解了Logn小于1。 当我问几个年长者时,我今天自己就知道这一点,即如果n的值很大(通常在考虑大O时,即最坏的情况),logn可以大于1。 >

是的, O(1)

(我认为这是一个愚蠢的问题,也打算将其删除,但是后来意识到,没有问题是愚蠢的问题,可能会有其他人对此感到困惑,所以我把它留在了这里。)

答案 5 :(得分:0)

无论两个函数在&{ ... }的较小值上如何工作,只要n足够大,它们就会相互比较。从理论上讲,存在一个n,这样对于每个给定的N,然后是n > N。如果选择nlogn >= n,则N=10总是大于nlogn

答案 6 :(得分:0)

在计算机中,它是以2为底的日志,而不是以10为底。因此log(2)为1,而log(n)为n(大于2)是一个大于1的正数。 仅在log(1)的情况下,我们的值小于1,否则,它的值大于1。

答案 7 :(得分:0)

对于更高的 log n 值,它变得大于 1。当我们考虑 n 的所有可能值时,我们可以说在大多数情况下 log n 大于 1。因此我们可以说 O(nlogn) > O( n)(假设更高的值)