时间复杂度 n^2
Time complexity n^2
本文关键字:时间复杂度 更新时间:2023-10-16
这是O(N^2(还是O(nlogn(。当有嵌套循环时不是 n^2 吗?
int a[], N;
int f1(){ int i, j, sum=0;
for (i=1;; i=2*i)
{
If (i>=N) return sum;
for (j=1; j<2*i;j++) sum+=a[i];
}
这是
O(N log N)
,因为外部循环在每次迭代中都会使i
的值加倍。所以外循环的复杂性是O(log N)
而不是O(N)
。
如果您有i++
或类似的而不是i=2*i
那么两个循环的时间复杂度将O(n^2)
。
编辑:这是一个简化的分析。请参阅R Sahu的答案以进行更严格的分析。
这是 O(N^2( 还是 O(nlogn(。
都不是。
当有嵌套循环时不是 n^2 吗?
当您线性迭代项目时,情况确实如此。在你的情况下,情况并非如此。
在您的情况下...
i
的值为:1 2 4 8 16 ...N
内部循环执行 2 + 4 + 8 + 16 + 32 ...N次。
这是一个几何系列。几何级数的总和为 a(1 - r^n)/(1 - r)
。
在您的情况下,a
是 2
,r
是2
,n
是log2(N)
(以 2 为基数的日志(。因此,经过一些简化后,总和是2*2^(log2(N))
,这与2*N
相同。
即您的算法复杂性O(N)
.
感谢@LedHead纠正初始帖子中的错误。
相关文章:
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 函数的时间复杂度是多少?
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何计算此排序函数的时间复杂度?
- 计算两个代码块的时间复杂度
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 具有嵌套 if-else 的循环的时间复杂度
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 如何计算函数的时间复杂度?
- 求解包含"variables"的 T(n) 时间复杂度
- 查找数字是否为 2 的幂的时间复杂度
- C++ - 最坏情况和平均情况插入时间复杂度在 std::unordered_map <int,int>?
- 为什么一种算法在相同的时间复杂度下比另一种算法更快?
- 关于记忆后这种递归关系的时间复杂度
- 2 个嵌套循环的时间复杂度
- 给定C++代码的时间复杂度是多少?
- 降低程序的时间复杂度