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,而是时间复杂度,这并不重要。