为O(log n)的总是为O速度(N)

问题描述 投票:15回答:3

如果有2种算法,计算不同的复杂性相同的结果,将O(log n)的永远是更快?如果是这样,请解释。顺便说一句,这不是一个问题的分配。

algorithm complexity-theory
3个回答
27
投票

否。如果一个算法在N/100,而另一个在(log N)*100运行,然后第二个将是更小的输入尺寸慢。渐近复杂性是有关的运行时间的行为作为输入大小到无穷大。


17
投票

不,它不会总是更快。但是,随着问题规模的增长越来越大,最终你总会达到一个点,其中O(log n)的算法比为O(n)的速度更快。

在现实世界中的情况,通常在O(log n)的算法将超越O(n)的算法会来非常快的地步。还有为O(log n)和O(N)之间有很大的区别,就像有O(n)和O(N ^ 2)有很大的区别。

如果你有阅读由乔恩·本特利编程珠玑的机会,还有在那里,他抽得一个O(n)的算法针对Ø一个真棒章(N ^ 2)一个,千方百计给为O(n ^ 2 ) 优势。 (在C他代码为O(n ^ 2)算法在Alpha,并在解释基本的O(n)的算法在旧的Z80类的东西,在大约1MHz的运行。)这是令人惊讶的速度有多快为O(n)算法追上为O(n ^ 2)之一。

不过偶尔,你会发现一个非常复杂的算法,其具有的复杂性只是比简单的一个稍微好一点。在这种情况下,不要盲目选择一个更好的大O的算法 - 你会发现,它只是在非常大的问题更快。


0
投票

对于大小为n的输入,O-的算法(n)的将执行步骤与n成比例,而的O另一个算法(的log(n))将执行步骤大致的log(n)。

显然LOG(n)是大于n,因此复杂性为O(log(N))较好的算法更小。因为它要快得多。

More Answers from stackoverflow

© www.soinside.com 2019 - 2024. All rights reserved.