【问题标题】:Confusion in time complexity时间复杂度混乱
【发布时间】:2017-09-04 09:22:15
【问题描述】:

下面程序O(n^2)的时间复杂度是多少?

for (int i = n; i > 0; i += c) {
   for (int j = i+1; j <=n; j += c) {
      // some O(1) expressions
   }
}

第二个for循环不会像条件j &lt;= n那样正确执行,j的值总是大于n。
检查此link 中的第三点

【问题讨论】:

  • 这里看起来有问题。也许他们的意思是第一个循环中的i -= c?
  • 奇数组循环 - 外部循环似乎在倒计时,内部循环在向上计数 - 根据它们的条件 - 但两者都以相同的值递增(向上) - 或者如果值为负数则递减.你确定你在这里得到了正确的例子吗?
  • 是的@davidbak 这个例子是对的。我猜原来的链接有打字错误。
  • 可悲的是,实际上互联网上存在错误....

标签: c++ algorithm time time-complexity


【解决方案1】:

我认为作者在这里的真正意思是

for (int i = n; i > 0; i -= c) {
   for (int j = i+1; j <=n; j += c) {
      // some O(1) expressions
}

这样,复杂度为 (1+n/c)*(n/2c) = O(n^2)

【讨论】:

    【解决方案2】:

    如果n 和c 是正数,那么第二个for 循环不会执行。

    在我看来,那些 for 循环在那个链接中写错了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      • 2012-08-14
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多