以下哪个函数不是O(log(N))

时间:2015-08-25 21:14:29

标签: algorithm data-structures big-o time-complexity

我为计算机科学课提出了一个多项选择题:

以下哪项功能不是O(log(N))

  1. log(log(N))
  2. 1000 + log(N)
  3. 1000 log(N)
  4. log(1000 N)
  5. log(N^2)
  6. 1000 log(1000 N^1000)
  7. 以上所有内容均为O(log(N))
  8. 哪一个是正确答案?

1 个答案:

答案 0 :(得分:5)

正确的选项是7 - 每个选项都是O(log(N))

让我们看看原因:

  1. log(log(N)) - 这比log(N)慢,所以从技术上来说,你可以说它是O(log(N))(虽然实际上人们通常会尝试获得最严格的约束,所以你会说它是O(log(log(N)))。 FWIW,您甚至可以说O(N^2)O(N^N)

  2. 1000 + log(N) - 这显然是O(log(N)) - 请记住常量被删除;这里感兴趣的是log(N)

  3. 1000 log(N) - 出于同样的原因,这是O(log(N))(增长因子是log(N),常数在渐近分析中可以忽略不计。)

  4. log(1000 N) - 再次,常数...

  5. log(N^2) - 请记住log(a^b)b log(a)相同,因此log(N^2)2 log(N)相同,原因相同是O(log(N))

  6. 1000 log(1000 N^1000) - 再次,这相当于10^6 log(1000 N) O(log(N))

  7. 如果由于某种原因你仍然不确定为什么常量渐近被丢弃,你可以看一下the formal definition of Big O notation,但背后的直觉是随着N的增长,常数因素很容易变得(在某些时候)可以忽略不计,因此它们并没有产生太大的影响。 Big O分析的目的是让人们了解算法的运行时间随着输入越来越大而增长。