Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 具有两个独立外循环和一个相关内循环的三重嵌套For循环_Algorithm - Fatal编程技术网

Algorithm 具有两个独立外循环和一个相关内循环的三重嵌套For循环

Algorithm 具有两个独立外循环和一个相关内循环的三重嵌套For循环,algorithm,Algorithm,我有以下循环序列 TripleLoop(int n) for i <- 1 to n for j <- 1 to n for k <- j to n do num <- j + i return num TripleLoop(int n) 对于iWell,内部循环(以k作为迭代器的循环)执行n-j+1次,因为它从j开始,以n结束 中间for循环因此执行的总步骤数是j每次迭代的步骤数之和,这意味着我们运行内部for

我有以下循环序列

  TripleLoop(int n)
   for i <- 1 to n
       for j <- 1 to n
          for k <- j to n 
   do num <- j + i
   return num
TripleLoop(int n)
对于iWell,内部循环(以
k
作为迭代器的循环)执行
n-j+1次,因为它从
j
开始,以
n
结束

中间
for
循环因此执行的总步骤数是
j
每次迭代的步骤数之和,这意味着我们运行内部for循环体的总次数为:

 n
---
\                  n * (n + 1)
/    n - j + 1  = -------------
---                    2
j=1
因此,在外部循环的一次迭代(以
i
作为迭代器的循环)之后,我们有
n*(n+1)/2个
步骤

总的来说,我们的算法将运行内部循环的主体总共
n*n*(n+1)/2次。因为外部循环运行了
n次
,循环体中的步数不取决于
i
本身的值

如果我们考虑<代码> num ,内环(即<代码> k < /代码>作为迭代器)执行<代码> N-J+ 1 时间,因为它开始于<代码> J<代码>,结束于<代码> N< /代码> .< 中间

for
循环因此执行的总步骤数是
j
每次迭代的步骤数之和,这意味着我们运行内部for循环体的总次数为:

 n
---
\                  n * (n + 1)
/    n - j + 1  = -------------
---                    2
j=1
因此,在外部循环的一次迭代(以
i
作为迭代器的循环)之后,我们有
n*(n+1)/2个
步骤

总的来说,我们的算法将运行内部循环的主体总共
n*n*(n+1)/2次。因为外部循环运行了
n次
,循环体中的步数不取决于
i
本身的值


如果我们考虑<代码> num,确切的问题是什么?我很难计算内部for循环的运行时间,因为它取决于索引j。确切的问题是什么?我很难计算内部for循环的运行时间,因为它取决于索引j。所以,为什么它是O(n ^ 3)?如果内环依赖于索引j。我认为所有for循环都必须从1运行到n,才能使整个算法成为O(n^3)。@johndex:因为在答案中指定,

n-j+1
j
的和从
1
n
,是
n*(n+1)/2
,当然是O(n^2)。注意O(n^2)是一组函数。步数不是n^3,也就是n^2*(n+1)/2,而是时间复杂度,这并不重要。那么,如果内环依赖于索引j,为什么是O(n^3)。我认为所有for循环都必须从1运行到n,才能使整个算法成为O(n^3)。@johndex:因为在答案中指定,
n-j+1
j
的和从
1
n
,是
n*(n+1)/2
,当然是O(n^2)。注意O(n^2)是一组函数。步骤的数量不是n^3,也就是n^2*(n+1)/2,而是时间复杂度,这并不重要。