data-structures - 迭代程序的时间复杂度分析需要说明
问题描述
以下迭代程序的时间复杂度是多少?
void function(int n) {
int count = 0;
for (int i=0; i<n; i++)
for (int j=i; j< i*i; j++)
if (j%i == 0)
{
for (int k=0; k<j; k++)
printf("*");
}
}
解决方案
(n * n * n^2) 使三个循环的复杂度为 O(n^4)。
当 i = 5 时,
这意味着总体复杂性,
for (int j=5; j< 25; j++)
if (j%i == 0) // runs O(i) times
{
// runs j times when j = 5, 10, 15, 20
for (int k=0; k<j; k++) {
printf("*"); // runs j times when j = 5(1 + 2 + 3+ 4)
// runs j times which is i*i*(i*(i-1)/2) times
// runs i^4 times
}
}
这意味着总复杂度为 O(n^4)。请记住,big-O 表示法用于给出一段代码的运行时间的上限,因此如果运行时间实际上是 O(n4),则说运行时间是 O(n5) 不是错误的; 它只是不紧。
推荐阅读
- api - 获取 REST API 的 AWS Cognito 令牌,以便我对其进行测试
- docker - ELMAH 未使用 Docker 容器中的 ASP.NET MVC 记录到 XML 文件
- python - 同一列中的多个外键SqlAlchemy python Flask
- testing - 我正在尝试在 using testcafe 中找到一个元素,但我无法这样做。请问有没有办法做到这一点?
- python - Pandas - iloc - 将值与下面的单元格进行比较
- javascript - ASP.Net MVC-如何使用 ViewBag 数组对象在列表项上动态创建单击事件监听器
- node.js - AWS Lambda:如何在 Dynamodb 中更新地图中的项目
- caching - 如何在 .NET Core 中检索内存缓存键列表?
- python - 如何在数据库中获取一个值并在 django 表单上显示
- react-native - 反应原生远程通知