如果有2种算法以不同的复杂度计算相同的结果,那么O(log n)总是会更快吗?如果是这样请解释。顺便说一下,这不是一个任务问题。
答案 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))的算法更好。因为它将更快。