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

标签 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

最佳答案

请注意,从 1n 系列中的每三个数字都可以被 3 整除。在最坏的情况下,这样的数字最终会被 3 整除在 k 循环 log_3(i) 次。因此,该序列在三分之二的时间里表现得像O(n),在三分之一的时候像O(n*log3(n))。因此,我们可以声称您的代码的上限为 O(n*log3(n)),尽管存在比这更严格的界限。

代码将打印系列中的每个值 i 以及该数字的“三个深度”。 “三深度”是指我们能够将 i 除以 3 的次数。显然,对于不是 3 的倍数的 i 值,深度为 0。

关于algorithm - 找到模块化算法的Big-O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48759959/

相关文章:

algorithm - 'finding the max in an array' 可能达到多快?

algorithm - 如何构建仅知道连接哪些节点的二叉树?

string - 字符串的哈希函数

java - 递归和迭代 fib 函数的大顺序?

algorithm - 阶乘尾随零 BigO 问题

big-o - 找出以下循环的计算复杂度

algorithm - 具有多个分支的递归函数的时间复杂度

algorithm - 外部分类

algorithm - 多人游戏锦标赛生成器

java - BIG O循环分析