算法时间复杂度类型解释

时间:2015-07-10 15:13:59

标签: c++ algorithm big-o time-complexity complexity-theory

我读到了算法的时间复杂性,我不知道我是否理解......以下所有示例都是用C ++创建的。如果我错了,请告诉我:

O(1)

int k;
k = 0;

O(n)

for(int i=0; i<n; i++) {
   k[i] = i%10;
}

O(n^2)

for(int i=0; i<n; i++) {
   for(int j=0; j<n; j++) {
      k[j] = i%10;
   }
}

O(n^k)(k是一个已知数字 - 语句有k):

for(int i=0; i<n; i++) {
   for(int j=0; j<n; j++) {
      .......
      for(int f=0; f<n; f++) {
         k[j][f] = p%10;
      }
      .......
   }
}
  1. 什么是O(k^n)?什么是O(log n)O(n * log n)?请给我一个算法(代码)示例。

  2. 上面的例子我错了吗?

2 个答案:

答案 0 :(得分:1)

互联网上有很多解释,谷歌为#O;大O符号&#34;。您可以在https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/

找到一个简单的介绍

示例:

  • O(k ^ n):生成n个字符的所有单词

  • O(log n):通过重复减半来搜索n个元素的排序列表

  • O(n log n):使用例如对列表进行排序Quicksort算法

空间复杂性与时间复杂性无关。搜索列表不会花费太多空间,但确实需要花费时间。你可以使用&#34; Big O&#34;任何函数的表示法,因此消耗时间作为n的函数,或消耗的空间作为n的函数。

你的所有例子都是正确的。

答案 1 :(得分:1)

1。 O(k ^ n):列出所有二进制字符串长度n(O(2 ^ n))

O(logn):二进制搜索是最简单的例子

O(nlogn):排序算法,例如quicksort,heapsort ....

  1. 你是对的

  2. 不,空间复杂度与时间复杂度不同 示例:如果将数据存储到二维数组中,则它们具有O(n ^ 2)空间复杂度,但您只需要一个用于循环遍历n个元素,那么您的算法具有O(n)时间复杂度。 注意:在我的例子中使用O(n ^ 2)和O(n)并不完全正确,我们最好使用theta(n ^ 2)和theta(n)

  3. 希望它有所帮助。