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

Var*_*lyn 16 algorithm complexity-theory

如果有2个algorthim计算具有不同复杂性的相同结果,那么O(log n)总是会更快吗?如果是这样请解释.顺便说一句,这不是一个任务问题.

a3n*_*3nm 28

不可以.如果一个算法运行N/100而另一个算法运行(log N)*100,那么第二个算法对于较小的输入大小将会更慢.随着输入大小变为无穷大,渐近复杂性与运行时间的行为有关.

  • 1*n是O(n).10000000000000000000000000000000*(log n)是O(log n).在这种情况下,O(n)不会在极小的输入上更快.但随着"n"向无穷大增长,*最终*O(log n)将更快. (4认同)

Ale*_*x D 17

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

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

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

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