java - 试图计算下面这段代码的时间复杂度
问题描述
下面这段代码的时间复杂度是O(n^5)
多少?我的推理是外部for循环是O(n)
,中间for循环是O(n^2)
因为i的值是基于n的值,而内部for循环是O(n^2)
因为j的值是基于if i^2的值,即基于 n^2 的值。
int x = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < i * i; j++) {
for (int k = 0; k < j; k++) {
x++;
}
}
}
解决方案
那不是那么简单。x
要确定复杂性,需要计算将增加多少倍。
The most inner loop runs `j` times.
The middle loop runs `i*i` times.
The outer loop runs n times.
让我们减少:
中间循环的复杂度是:
1+2+3+...+(i-1)+i+(i+1)+...+(i-1)*(i-1) = (i^2-2i+1)*i*i/2=(i^4-2i^3+i^2)/2
并且外部循环运行n
时间为每个 n 从 0 到n-1
。它总结为:
n^5/10 - n^4/2 + 5n^3/6 - n^2/2 + n/15
它实际上是O(n^5)
。
数学符号是:
推荐阅读
- curl - 卷曲不正确的符号
- java - 我可以使用类似于 farbic8 的 spotify 插件配置远程 DOCKER_HOST
- r - 反码函数,处理引号
- android - Socket 和 SSLSocket 在同一个端口上运行
- reactjs - 如何在 package.json 中链接 css:watch 和 babel
- android - 将国家名称转换为 ISO Alpha 2 国家代码
- java - spring-boot 执行器健康检查事件
- android - 如何更改XML文件android studio中的字体
- javascript - 如何在 ng-repat 中保存元素的索引?
- python - Python : How to easily track the module/function definition in big package