此代码的复杂度为O(log(n ^ 2)* log(n),我不明白我们如何得出此结果。
根据我的说法,嵌套的while的大O应该是log(n),因为它是一个while循环,每次进入循环时,j都会除以4,对于初始的while循环,i等于2。特别是不了解哪个while循环的复杂度为O(log ^ 2(n))
c = 0
i = n * n
while i > 0:
j = n
while j > 0:
c += 1
j = j//4
i = i//2
print c
答案 0 :(得分:2)
我似乎想出了O(log_4(n)*log_2(n))
作为复杂性。首先,请注意,外部while
和内部i
循环是不相关的。也就是说,j
中的外部循环独立于n
中的内部循环。根据{{1}},这是外循环和内循环的复杂性:
外循环:O(log_2(n))
。这是因为循环从n^2
开始,然后将计数器递减2,这就是log_2
的行为。正如@chepner所说:
O(log_2(n^2)) == 2*O(log_2(n)) = O(log_2(n))
内循环:O(log_4(n))
。此循环从n
开始,并将计数器减少4倍,这就是log_4
的行为。
您当前的猜测几乎是正确的,只是您可能错过了对数的底数。