我有以下循环序列。
TripleLoop(int n)
for i <- 1 to n
for j <- 1 to n
for k <- j to n
do num <- j + i
return num
我知道两个外部循环运行“ n”次。 因此,对于两个外部循环,我们有n * n = n ^ 2。 但是,第三个内部循环取决于变量“ j”。
我如何开始解决这些嵌套的依存for循环类型? 我不确定是否应该相乘,或者将第三个内部循环添加到两个外部循环中。
有人可以帮我吗?
答案 0 :(得分:0)
内部循环(以k
作为迭代器的循环)执行了n-j+1
次,因为它从j
开始并以n
结尾。
中间for
循环执行的 steps 总数是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 <- j + 1
部分在恒定时间内运行(严格来说,严格地讲,对大量数字求和不能在恒定时间内运行),那么这就是 O(n 3 )算法。