给出了三种算法的时间复杂度。哪个应该对N的大值执行最慢?

时间:2017-05-23 19:02:54

标签: algorithm data-structures time-complexity

给出的选项:

(a) O(2N)
(b) O(N)
(c) O(logN)
(d) O(n^2)

我在网上考试时遇到过这个问题。他们提到的正确选项是O(logN)。但在我看来它应该是O(2N),因为" n ^ 2"他们给了," n"是小写的,否则它应该是O(N ^ 2)。有人帮我正确回答。enter image description here

2 个答案:

答案 0 :(得分:2)

要比较复杂性O(A(n))O(B(n)),您应该计算限制

lim A(n)/B(n) = ?
  n->+Inf

您可以三个可能的结果:

   0      A (infinitely) faster than B
+Inf      A (infinitely) slower than B
   v > 0  A~B; A is v times slower than B 

在你的情况下:

lim(n^2/2n) = lim(n^2/n) = lim(n^2/log(n)) = +Inf
  n->+Inf       n->+Inf      n->+Inf

这就是为什么(d) O(n^2)(a)..(d)个中最慢的算法的原因。

最快算法为(c) O(log(n)),(使用L'Hospital's rule计算限制):

lim(log(n)/2n) = lim(log(n)/n) = lim(log(n)/n^2) = 0
  n->+Inf          n->+Inf         n->+Inf

最后,算法从最快到最慢排序:

(c) O(log(n)), (b) O(n), (a) O(2*n), (d) O(n^2)

答案 1 :(得分:0)

你是正确的(d)应该是最慢的,如本图所示:

enter image description here