算法复杂度
★如何计算算法复杂度:
①乘法原则:
例子1:
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
sum++;
}
}
上面的代码中,for内循环执行了n次,这个for内循环被执行了n遍。所以这个代码的执行次数为nn,复杂度就是n2。
例子2:
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
sum++;
}
}
上面的代码中,for内循环每次都要执循环n-i+1次,这个for内循环被执行了n遍。所以这个代码的执行次数为1+2+3+……+n=n(n+1)/2,复杂度就是n(n+1)/2。
②加法原则:
例子:
for(int i=1;i<=n;i++){
sum++;
}
for(int i=1;i<=m;i++){
sum++;
}
上面的代码中,第1个for循环执行了n次,第2个for循环执行了m次,
这段代码的执行次数为n+m,复杂度就是n+m;
★O记号:
n很大的时候,n^2和n(n+1)/2区别不太大,不需要那么精确,更关心量级。
O记号给我们提供了一种非常简单的方法来衡量复杂程度。可以理解为:
最坏情况下,代码执行总次数。
计算方法:
1.如果有多项相加,只保留最大项;
2.省略所有常数(自然数)。
例子:
①n(n+1)/2→O(n^2)
②3n+n2+1→O(n2)
③211→O(1)(※注意:只有一个常数时,写为O(1))
④23*n123-1000*n+100→O(n123)
★常见的算法复杂度:
O(1) 表示算法的运行时间为常数。 常数阶
O(n) 表示该算法是线性算法。 线性阶
O(log n) 二分搜索算法。 对数阶
O(n log n) 快速排序算法。 线性对数阶
O(n^2) 对数组进行排序的各种简单算法,例如直接插入排序的算法。 平方阶
O(n^3) 做两个n阶矩阵的乘法运算。 立方阶
O(2^n) 求具有n个元素集合的所有子集的算法。 指数阶
O(n!) 求具有n个元素的全排列的算法。 阶乘阶
O(1)<O(log n)<O(n)<O(n log n)<O(n2)<O(n3)<O(2^n)<O(n!)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)