algorithm - if 条件复杂度 O(n * log(n))

标签 algorithm data-structures time-complexity big-o

s=0

for(i=1; i<n; i = i*2){ 
  if (i<20)
    for (j=0; j<n; j++)
    {
        s=s+i*j;
    }
    s=s+1
}

我正在尝试确定上述算法的大复杂度。外循环从 1 开始,一直运行到 n,每次迭代 i 中的计数器加倍,因此这是一个 log(n )行为。内循环从 0n 独立运行,具有 O(n) 行为。?

我不明白 if 语句如何影响复杂性。您可能不想向我提供答案,但请指导正确的方向,因为我根本不明白。

最佳答案

内部循环的复杂度为O(N),但只会运行5次, 即当i = 1, 2, 4, 8, 16

经过前 5 次迭代,你的代码基本上变成了

for(i=32; i<n; i = i*2){ 
    s=s+1
}

这是O(log(N))

所以总复杂度是:

O(5 * N + log(N)) = O(N)

关于algorithm - if 条件复杂度 O(n * log(n)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50670371/

相关文章:

javascript - 证券交易方计算

linq - 带 GroupBy 和 Min 和 Projection 的 IEnumerable 查询

python - 为什么我不能通过 pygtrie 在 trie 中添加单词?

java - 加权单向图的顶点表示

java - 重新排列数组使得 arr[i] = i

algorithm - 计算 HashMap 与二进制搜索的 O(n)

string - 了解滚动哈希如何与 Rabin Karp 算法中的模一起使用

algorithm - 维护没有循环或菱形的图形

在线性时间内创建队列链表

算法时间复杂度分析(三个嵌套的for循环)