i=1
while i <= n do:
j=0
k=i
while k%3 == 0 do:
k = k/3
j++
end
print i, j
i++
end
给定算法的 Big-O 是什么(我们如何展示我的作品)? 此算法输出的内容 //?
我的回答和方法
O(nlogn)
。因为外部循环以O(n)运行线性时间,而内部循环依赖于O(logn)
。
但我不确定它是logn
。
当n = 10时,
ij
00
10
20
31
40
50
61
70
80
92
100 ( 10, 0)
当n = 30
时i j
1 0
2 0
3 1
4 0
5 0
6 1
7 0
8 0
9 2
10 0
11 0
12 1
13 0
14 0
15 1
16 0
17 0
18 2
19 0
20 0
21 1
22 0
23 0
24 1
25 0
26 0
27 3
28 0
29 0
30 1
答案 0 :(得分:4)
欣赏从1
到n
的系列中的每个第三个数字都可以被3整除。在最坏的情况下,这样的数字最终会被{{1}中的3除以}循环k
次。因此序列的行为类似于log_3(i)
三分之二的时间,并且像O(n)
三分之一的时间一样。因此,我们可以声称您的代码在O(n*log3(n))
的上限,尽管有一个比这更严格的边界。
代码将打印系列中的每个值O(n*log3(n))
以及&#34;三个深度&#34;这个数字。通过&#34;三个深度&#34;我的意思是我们能够将i
除以3的次数。显然,对于不是3的倍数的i
值,深度为0。