algorithm - 带有 if-else 块的 for 循环的时间复杂度
问题描述
我想找到下面这段代码的时间复杂度。这是我的理解-
外部 for 循环将循环2n
次数,在最坏的情况下i==n
,我们将进入嵌套 for 循环复杂度为 的 if 块O(n^2)
,计算外部 for 循环,代码块的时间复杂度将为O(n^3)
.
在最好的情况下 when i!=n
, else 具有复杂性,O(n)
而外部 for 循环是O(n)
复杂性,在最好情况下为O(n^2)
。
我是正确的还是我在这里遗漏了什么?
for (int i = 0; i < 2*n; i++)
{
if (i == n)
{
for (int j = 0; j < i; j++)
for (int k = 0; k < i; k++)
O(1)
}
else
{
for (int j = 0; j < i; j++)
O(1)
}
}
解决方案
不。
问题“什么是 T(n)?”。你说的是“如果 i=n,那么 O(n^3),否则 O(n^2)”。但是问题中没有 i,只有 n。
想一个类似的问题:“一周中,Pete 在星期三工作 10 小时,每隔一天工作 1 小时,Pete 一周工作的总时间是多少?”。你并没有真正回答“如果星期是星期三,那么 X,否则 Y”。您的答案必须包括周三和每隔一天的工作时间。
回到您最初的问题,星期三是 i=n 的情况,而所有其他日子都是 i!=n 的情况。我们必须把它们全部总结起来才能找到答案。
推荐阅读
- css - 关闭时模态上的css关键帧动画
- vue.js - Vue - 试图避免改变道具,但没有成功
- c - 如何通过钩子 sys_exit_group 和 sys_kill 使进程无法退出
- c - For循环无法正常工作以获取c中数组中的输入
- java - Java - Selenium - 超出页面视图的 Div 元素即使在滚动到视图后也不会加载
- java - 杰克逊 xmlmapper 用于地图
, 对特定标签做出反应 - c++ - bits/stdtr1c++.h 和 bits/std1c++.h 头文件有什么区别?
- swift - 在 Swift 中将日期格式化为 sql 日期格式
- postgresql - DB的大小和/var/lib/postgresql/data的大小有什么关系
- java - 读取 CSV 并将内容转换为 ArrayList