Time complexity 这些循环的大Oh有什么不同?

Time complexity 这些循环的大Oh有什么不同?,time-complexity,Time Complexity,三个For循环: 我对这个大的Oh东西是相当陌生的,我很难看到这三个循环之间的复杂性差异 它们似乎都小于O(n^2),但大于O(n) 有人能给我解释一下如何评估这些循环的复杂性吗 谢谢 有人能给我解释一下如何评估这些循环的复杂性吗 从明确定义问题开始。链接的图像没有什么可继续的,所以让我们开始编东西: 正在更改的参数是整数n C是大于1的常数正整数值 循环变量是整数 整数不会溢出 加法、比较、赋值、乘法和索引的成本都是不变的 我们要寻找的复杂性的代价是最内部循环的常量操作的代价;在循环变量的

三个For循环:

我对这个大的Oh东西是相当陌生的,我很难看到这三个循环之间的复杂性差异

它们似乎都小于O(n^2),但大于O(n)

有人能给我解释一下如何评估这些循环的复杂性吗

谢谢

有人能给我解释一下如何评估这些循环的复杂性吗

从明确定义问题开始。链接的图像没有什么可继续的,所以让我们开始编东西:

  • 正在更改的参数是整数n
  • C是大于1的常数正整数值
  • 循环变量是整数
  • 整数不会溢出
  • 加法、比较、赋值、乘法和索引的成本都是不变的
  • 我们要寻找的复杂性的代价是最内部循环的常量操作的代价;在循环变量的实际计算中,我们忽略了所有的加法等等
  • 在每种情况下,最里面的语句都是相同的,并且成本是恒定的,所以我们将该成本称为成本的“一个单位”
太好了

第一个循环的成本是多少

内部报表的成本是一个单位

包含它的“j”循环每次的成本是10个单位

“i”循环运行了多少次?大约n除以C

所以“i”循环的总成本是10*n/C,也就是O(n)

现在你能做第二个和第三个循环了吗?更清楚地说出你在哪里遇到了麻烦。首先:

  • 第一次运行“j”回路的成本为1个单位
  • “j”回路第二次运行的成本为C个单位
  • “j”回路第三次运行的成本为C*C单位
从那里开始

记住,你不需要计算出确切的成本函数。你只需要计算出主要的成本。提示:我们对C*C*C了解多少。。。在外循环的最后一次运行时

有人能给我解释一下如何评估这些循环的复杂性吗

从明确定义问题开始。链接的图像没有什么可继续的,所以让我们开始编东西:

  • 正在更改的参数是整数n
  • C是大于1的常数正整数值
  • 循环变量是整数
  • 整数不会溢出
  • 加法、比较、赋值、乘法和索引的成本都是不变的
  • 我们要寻找的复杂性的代价是最内部循环的常量操作的代价;在循环变量的实际计算中,我们忽略了所有的加法等等
  • 在每种情况下,最里面的语句都是相同的,并且成本是恒定的,所以我们将该成本称为成本的“一个单位”
太好了

第一个循环的成本是多少

内部报表的成本是一个单位

包含它的“j”循环每次的成本是10个单位

“i”循环运行了多少次?大约n除以C

所以“i”循环的总成本是10*n/C,也就是O(n)

现在你能做第二个和第三个循环了吗?更清楚地说出你在哪里遇到了麻烦。首先:

  • 第一次运行“j”回路的成本为1个单位
  • “j”回路第二次运行的成本为C个单位
  • “j”回路第三次运行的成本为C*C单位
从那里开始


记住,你不需要计算出确切的成本函数。你只需要计算出主要的成本。提示:我们对C*C*C了解多少。。。在外循环的最后一次运行时?

您可以使用西格玛符号分析循环。注意,为了研究循环(a)的渐近行为,常数
C
仅描述循环中的线性增量,我们可以在分析中自由选择
C
的任何值(因为内循环只是一个固定的迭代次数),但假设
C>0
(整数)。因此,对于循环(a),选择
C=1
。对于循环(b),我们将包括C,但是假设
C>1
(整数)。如果循环(b)中的
C=1
,它将永远不会终止,因为
i
永远不会递增。最后,使用cost
O(1)
将所有循环中最内层的操作定义为我们的基本操作

西格玛符号分析如下:

因此


您可以使用Sigma符号分析循环。注意,为了研究循环(a)的渐近行为,常数
C
仅描述循环中的线性增量,我们可以在分析中自由选择
C
的任何值(因为内循环只是一个固定的迭代次数),但假设
C>0
(整数)。因此,对于循环(a),选择
C=1
。对于循环(b),我们将包括C,但是假设
C>1
(整数)。如果循环(b)中的
C=1
,它将永远不会终止,因为
i
永远不会递增。最后,使用cost
O(1)
将所有循环中最内层的操作定义为我们的基本操作

西格玛符号分析如下:

因此


也许你可以(1)张贴你感到困惑的代码文本,(2)提出一个问题。你说你很困惑,你说你不知道一些事情之间的区别;这些是事实,不是问题。你到底在问什么?我做了一些改变。很抱歉。也许你可以(1)发布你感到困惑的代码文本,以及(2)问一个问题。你说你很困惑,你说你不知道一些事情之间的区别;这些是事实,不是问题。你到底在问什么?我做了一些改变。很抱歉。
(a) is O(n)
(b) is O(n)
(c) is O(n*log(n))