【问题标题】:Algorithm time complexity types explaining [closed]算法时间复杂度类型解释[关闭]
【发布时间】:2015-07-10 15:13:58
【问题描述】:

我读到了算法的时间复杂度,但我不知道我是否理解……下面的所有示例都是用 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. 上面的例子我错了吗?

【问题讨论】:

  • Binary search 是(最坏情况)O(logN) 算法的经典示例
  • 为什么是-1?请解释我编辑问题以使其更好。
  • 可能是-1,因为它是家庭作业或测试题。
  • @dbilz Homework questions are not off-topic if asked properly。我认为反对票是因为这是一个相当广泛的问题。这里有几个请求 a) 展示了一堆代码 sn-ps 示例及其复杂度 b) 解释空间复杂度和时间复杂度之间的区别。如 awesomeyi 共享的链接所示,如果您搜索第一个请求,这将得到很好的记录。

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


【解决方案1】:

互联网上有很多解释,谷歌为“大O符号”。您可以在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):使用例如排序列表快速排序算法

空间复杂度与时间复杂度无关。搜索列表不会占用空间,但会占用时间。您可以对任何函数使用“大 O”表示法,因此消耗的时间是 n 的函数,或者消耗的空间是 n 的函数。

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

【讨论】:

    【解决方案2】:

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

    O(logn):二分查找是一个最简单的例子

    O(nlogn):快速排序、堆排序等排序算法......

    1. 你是对的

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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 2021-08-22
      • 2014-02-27
      • 2016-02-13
      • 2019-01-26
      相关资源
      最近更新 更多