这个功能的时间复杂度?
algo(n)
for i in 0 to n {
for 0 to 8^i {
}
}
for i to 8^d {
}
任何有关此算法的时间复杂度的分析或信息都将是有用的。 最坏情况,最佳情况,下限/上限,theta / omega / big-o,递归关系等等。
你的算法运行在指数时间( T ∈ Θ(c^n)
, c>1
)。 您可以使用Sigma符号分析内部for
循环( ... for 0 to 8^i
)的迭代次数:
由于你的算法在Θ(8^n)
,它也在O(8^n)
(上渐近界)和Ω(8^n)
(下渐近界)中。
上述分析是在假设最终for
循环分析中的d
小于或等于n
情况下进行的,在这种情况下,在它之前嵌套的两个for
循环将占优势(因此我们不需要分析最后一个非优势for
循环明确)。
算法(n)基本上由两部分组成:
for i in 0 to n
for 0 to 8^i
和
for i to 8^d
我们从第一个开始。 假设内部循环的每次迭代都需要一定的时间,那么复杂度就是C*8^i
。 现在,如果我们遇到的可能值概括i
,我们得到:
8^0 + 8^1 + 8^2 + .... + 8^n-1
这是a=1, r=8
的几何级数的总和,其和为:
1 * (1-8 ^(n-1)) / (1-8) = 1 * (-1/7 + 8^(n-1)/7)
对于n->infinity
,这可以近似为8^(n-1)/7
,并且我们可以得出复杂度为Θ(8^(n-1)/7) = Θ(8^n)
至于第二部分,它非常简单,并且是8 ^ d。
这给出T(n)
总复杂度在Θ(8^d + 8^n)