O(log n)总是比O(n)快

时间:2012-02-08 20:55:22

标签: algorithm complexity-theory

如果有2种算法以不同的复杂度计算相同的结果,那么O(log n)总是会更快吗?如果是这样请解释。顺便说一下,这不是一个任务问题。

3 个答案:

答案 0 :(得分:27)

没有。如果一个算法在N/100中运行,而另一个算法在(log N)*100中运行,则第二个算法对于较小的输入大小将会较慢。随着输入大小变为无穷大,渐近复杂性与运行时间的行为有关。

答案 1 :(得分:16)

不,它并不总是更快。但是,随着问题规模变得越来越大,最终总是会达到O(log n)算法比O(n)算法更快的点。

在实际情况中,通常O(log n)算法将超过O(n)算法的点将非常快。 O(log n)和O(n)之间存在很大差异,就像O(n)和O(n ^ 2)之间存在很大差异一样。

如果你有机会阅读Jon Bentley的 Programming Pearls ,那里有一个很棒的章节,他在那里针对O(n ^ 2)算法进行O(n)算法,尽一切可能给O(n ^ 2)带来优势。 (他在Alpha上用C编码O(n ^ 2)算法,用旧Z80或其他东西编译解释BASIC中的O(n)算法,运行频率约为1MHz。)令人惊讶的是O(n)有多快算法超过O(n ^ 2)。

但有时候,您可能会发现一种非常复杂的算法,其复杂性略好于简单算法。在这种情况下,不要盲目地选择具有更好的大O的算法 - 你可能会发现在极大的问题上它只会更快。

答案 2 :(得分:0)

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

显然log(n)小于n,因此复杂度为O(log(n))的算法更好。因为它将更快。

More Answers from stackoverflow