如果有2种算法,计算不同的复杂性相同的结果,将O(log n)的永远是更快?如果是这样,请解释。顺便说一句,这不是一个问题的分配。
否。如果一个算法在N/100
,而另一个在(log N)*100
运行,然后第二个将是更小的输入尺寸慢。渐近复杂性是有关的运行时间的行为作为输入大小到无穷大。
不,它不会总是更快。但是,随着问题规模的增长越来越大,最终你总会达到一个点,其中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的算法 - 你会发现,它只是在非常大的问题更快。
对于大小为n的输入,O-的算法(n)的将执行步骤与n成比例,而的O另一个算法(的log(n))将执行步骤大致的log(n)。
显然LOG(n)是大于n,因此复杂性为O(log(N))较好的算法更小。因为它要快得多。