这是伪代码。我试图计算这个函数的时间复杂度this answer。应该是这样的:
n + n/3 + n/9 + ...
我猜可能时间复杂度类似于O(nlog(n))
?或者log(n)
应为log(n)
基础3 ?有人说时间复杂度是 O(n),这对我来说是完全不可接受的。
j = n
while j >= 1 {
for i = 1 to j {
x += 1
}
j /= 3
}
答案 0 :(得分:6)
算法将在:
中运行n + n / 3 + n / 9 + ... = series〜= O(3/2 * n)= O(n)
因为3/2是常量。这里第k个循环将以n / 3 k 步进行。
请注意与链接问题的重要区别,外部循环运行n
次并且已修复。