algorithm - Big-O 时间复杂度,嵌套 for 和 while 循环

标签 algorithm big-o

我正在尝试理解 Big-O 时间复杂度,不幸的是,我在挣扎,我似乎无法理解这个概念,我知道我的结果对于以下两个代码片段是正确的,但是我到达那里的方式似乎是错误的。有人可以帮助解释我误解的地方吗(请不要,但是不要使用 sigma。谢谢!

Code Fragment               Time Complexity
sum ← 0                     O(1)
  for i ← 1 to n do         O(n)
    for j ← 1 to n do       O(n)
      k←1                   O(1)
      while k < n do        
        k ← k * C           O(log n)  - affected by C (due to multiplication)
        sum ← sum + 1       O(1)
                            -----------
                            O(1 x n x n x 1 x [log n] x 1)
                            O(n2 log n)

Code Fragment             Time Complexity
sum ← 0                   O(1)
 for i ← 1 to n do        O(n)
  for j ← 1 to i do       O(n) 
    k←1                   O(1)
    while k < n do      
      k ← k + C           O(n) – not affected by C, k is arbitrarily large
      sum ← sum + 1       O(1)
                            -----------
                          O(1 x n x n x 1 x n x 1)
                          O(n^3)

最佳答案

虽然最终结果是正确的,但我在计算中发现了一些小错误。

在第一个算法中:

O(1 x n x n x 1 x [log n] x 1)

应该是

1 + n x n x (1 + (O(log n) x 2)) = O(n^2 * log n)

在第二种算法中:

O(1 x n x n x 1 x n x 1)

应该是

1 + n x O(n) x (1 + (O(n) x 2)) = O(n^3)

关于algorithm - Big-O 时间复杂度,嵌套 for 和 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26108001/

相关文章:

java - 如何遍历包含相同类型列表的 List<Type>

java - 这个算法的时间复杂度是多少

c# - 1 for 循环的最差时间复杂度(Big O)

algorithm - 复杂性——决定增长的顺序

精确比较非常大整数(十亿级)的两个指数的算法

algorithm - 启发式的具体例子

android - Android 可用的最快颜色量化算法是什么?

algorithm - 是否有可能在这种单调的非线性趋势上实现比 logn 搜索更好的性能?

complexity-theory - f(n)=n^log(n) 复杂度多项式或指数

c - C语言中的 friend 对算法递归解决方案