找到模块化算法的Big-O.

时间:2018-02-13 05:22:20

标签: algorithm big-o

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

1 个答案:

答案 0 :(得分:4)

欣赏从1n的系列中的每个第三个数字都可以被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。