c++ - 此代码的 Big-O 表示法是什么?
问题描述
我在决定 N^2 和 NlogN 作为大 O 时遇到问题?让我失望的是来自 k <=j 的第三个嵌套 for 循环。我该如何调和这个?
int Max_Subsequence_Sum( const int A[], const int N )
{
int This_Sum = 0, Max_Sum = 0;
for (int i=0; i<N; i++)
{
for (int j=i; j<N; j++)
{
This_Sum = 0;
for (int k=i; k<=j; k++)
{
This_Sum += A[k];
}
if (This_Sum > Max_Sum)
{
Max_Sum = This_Sum;
}
}
}
return Max_Sum;
}
解决方案
这可以通过估计或分析来完成。查看最j-i
里面的循环,在第二个循环中有操作。要获得操作总数,总和得到:
(1+N)(2 N + N^2) / 6
制作算法 O(N^3)。估计可以看到有三个循环在某些时候有 O(N) 调用,因此它是 O(N^3)。
推荐阅读
- sql - 将日期修改为日期时间时文件大小会增加
- delphi - Delphi FMX 10.3:在多平台应用程序中获取文件属性的问题
- hyperledger-fabric - Hyperledger Fabric - 查询区块链上的新交易
- c# - 添加到自动加载的程序不启动 C#
- java - SELECT 中的子查询可以返回多行吗?
- asp.net - 可以在 asp.net 项目之上使用 react 路由器从外部访问路径
- c++ - C++ 将十六进制字符串表示形式转换为十六进制
- python - 从 jinja 模板中恢复值
- python-3.x - 尝试使用 Bokeh 绘制 TimeSlider 地图时出现内存问题
- javascript - 如何映射这个json?