特定算法的复杂性与 3 for?
Complexity of an specific algorithm with 3 for?
我有一个问题,如果你能告诉我我做得对不对! 我们有这个算法
for(i=0;i<n*n;i++){
for(j=i;j<n;j++)
for(k=0;j<=9;k++)
c+=2;
我想找到这个的复杂性,如果你能告诉我我做得对
sum 0,n*n (sum i,n(20))= sum 0,n*n ((n-i+1)*20) = sum 0,n*n (n) - sum 0,n*n (i) + n*n*20
=nn20 + (nn-0+1)(n) -sum 0,n*n (i)
=n*n*n+nn20 -sum 0,n*n (i)
所以O(n*n*n)
这是对的吗?
复杂度:
for(i=0;i<n*n;i++)
for(j=i;j<n;j++)
for(k=0;k<=9;k++)
c+=2;
从内部循环开始:
for(k=0;k<=9;k++)
-> 10,所以常数:O(1)
.
for(i=0;i<n*n;i++)
会O(n²)
,但棘手
for(j=i;j<n;j++)
丢弃任何值i >= n
。
所以它变成了
for(i=0;i<n;i++)
for(j=i;j<n;j++)
for(k=0;k<=9;k++)
c+=2;
for(i=n;i<n*n;i++) {}
最后一个循环for(i=n;i<n*n;i++)
是O(n²)
(但由于编译器可能会丢弃no-op(
for(i=0;i<n;i++)
O(n)
for(j=i;j<n;j++)
O(n)
(因为O(n/2)
是O(n)
(
所以最终结果O(n²) + O(n²)
如此O(n²)
.
语句
c+=2;
被称为确切的
10 (n + n-1 + n-2 + ... + 1) = 5n² + 5n = 10 * sum i=1,n (i)
次。这是 O(n²(。循环
for(int i = 0; i < n*n; i++)
迭代n*n
次,但如果迭代i >= n
则不执行任何操作。因此,外循环有效地以恒定的复杂性迭代n * (n-1)
次(O(1(,它什么都不做(。
循环
for(int j = i; j < n; j++)
迭代n - i
次。和循环
for(int k=0; k <= 9;k++)
迭代 10 次。
这是
10 (n + n-1 + n-2 + ... + 1) = 5n² + 5n = 10 * sum i=1,n (i)
使用此代码,您可以确认对c += 2
的调用次数:
#include <iostream>
int main() {
for (int n = 1; n < 10; ++n) {
int c = 0;
for(int i = 0; i < n*n; i++)
for(int j = i; j < n; j++)
for(int k=0; k <= 9;k++)
c+=2;
std::cout << c / 2 << " == " << "5*" << n << "*" << n << " + 5*" << n << " : " << std::boolalpha << (c / 2 == 5*n*n + 5*n) << 'n';
}
}
结果:
10 == 5*1*1 + 5*1 : true
30 == 5*2*2 + 5*2 : true
60 == 5*3*3 + 5*3 : true
100 == 5*4*4 + 5*4 : true
150 == 5*5*5 + 5*5 : true
210 == 5*6*6 + 5*6 : true
280 == 5*7*7 + 5*7 : true
360 == 5*8*8 + 5*8 : true
450 == 5*9*9 + 5*9 : true
相关文章:
- "error: no matching function for call to"构造函数错误
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何在C++中从两个单独的for循环中添加两个数组
- 在Linux for Windows上编译C++代码时出错
- 调用专用模板时出错"no matching function for call to [...]"
- 为什么我的for循环不能正确获取argv
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 在基于范围的for循环中使用结构化绑定声明
- 通过for循环使用用户输入填充列表
- 使用for循环检查数组中的重复项
- 具有未知值时的时间复杂性
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 正在使用for循环创建QScatterSerie
- Python中的for循环与C++有何不同
- std::memory_order for std::atomic:<T>:wait
- 在更改for循环的第三部分后,未使用for循环结果
- 特定算法的复杂性与 3 for?
- 如何使用CUDA实现2-for粒子交互循环,以及由此产生的复杂性是什么