big-o - 三个嵌套循环的大 O 复杂度以及 if 语句中的最后一个循环
问题描述
假设我们有以下代码块:
sum = 0;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(i == j)
for(k = 0; k < n; k++)
sum++;
在我正在阅读的书中,它说复杂度是 O(n^2),准确地说是 thetha (n^2),但我不知道为什么。当尝试自己计算时,我得到 O(n^3):
- 外循环复杂度为 O(n)
- 通过遵循嵌套循环规则,通过第二个循环,复杂度达到 O(n^2)
- if 语句为真 n 次,因此到第三个循环时,复杂度将为 O(n*n^2)
- sum++ 语句花费恒定时间,因此复杂度保持在 O(n^3)
这是我的逻辑,但它似乎有缺陷。这里 O(n^2) 复杂度的原因是什么?
解决方案
第二个循环运行n
步骤。除了一个步骤外,每个步骤只需要恒定的时间(评估 if 语句)。第i
-th 步是O(n)
因为执行了第三个循环。所以第二个循环2n = O(n)
总共需要。所以总的来说你得到O(n^2)
.
推荐阅读
- r - 在igraph中获得具有度保持随机化的加权随机图
- python - 使用字典键遍历数据框行并在匹配时输出值
- html - 如何在 itch.io 上增加 Unity WebGL 游戏窗口的大小?
- java - 尝试通过 Httpurlconnection.setrequestmethod 使用 PATCH 时出现异常
- google-cloud-platform - 如何使用 Apache Beam 动态地将文件写入谷歌存储桶?
- r - 如何将NaN值添加到R中数据框的行名
- r - 整洁的评估,例如 mtcars %>% mutate(target := log(target))
- mysql - 获取按列 SQL 的计数百分比
- r - 将具有 NA 的行删除到特定的列和条件中
- python - 从实例属性动态继承所有 Python 魔术方法