我知道每个for循环都是O(log 2n),但我不确定它们中的3个会合在一起吗? O(3⋅log₂n)?谢谢你们。
for (int i = n; i > 0; i = i / 2) {
for (int j = n; j > 0; j = j / 2) {
for (int k = n; k > 0; k = k / 2) {
count++;
}
}
}
答案 0 :(得分:3)
正如你所说,每个自我循环都有时间复杂度Θ(log₂n)
。
由于循环不相互依赖,即变量i
,j
和k
对彼此没有影响,三个嵌套循环的复杂性可以简单地成倍增加你得到Θ((log₂n)⋅(log₂n)⋅(log₂n)) = Θ((log₂n)³)
,也写成Θ(log₂³n)
。这意味着它也在O(log₂³n)
。
注意:由于log₂³n
不等于3⋅log₂n
,您可以不简化log₂³n
至log₂n³
。