算法复杂度计算
一、基础
1、单循环
- 时间复杂度:O(N),进行N次操作
- 空间复杂度:O(1),变量a仅使用一个存储空间
| a = 0 |
| for i in range(N): |
| a = a + 1 |
- 时间复杂度:O(N),进行N/2次操作 -> (1/2)∗O(N) -> 忽略常数项O(N)
- 空间复杂度:O(1),变量a、b使用两个存储空间 -> 2∗O(1) -> 忽略常数项O(1)
| a, b = 0, 0 |
| for i in range(N/2): |
| a = a + 1 |
| b = b + 1 |
- 时间复杂度:O(log(N)),进行log(N)次操作
- 空间复杂度:O(1)
| a, i = 1, N |
| while i > 0: |
| i /= 2 |
2、多循环
- 时间复杂度:O(N2),进行N2次操作
- 空间复杂度:O(1)
| a = 0 |
| for i in range(N): |
| for j in range(N): |
| a = a + 1 |
- 时间复杂度:O(N2),循环1、2、3...N次,进行(1+N)∗N/2次操作 -> (1/2)∗O(N2)+(1/2)∗O(N)
- 空间复杂度:O(1)
| a = 0 |
| for i in range(N): |
| for j in range(i, N - 1): |
| a = a + 1 |
3、递归
主定理公式
T(n)=aT(n/b)+f(n)
- 若O(nlogba)>f(n),T(n)=O(nlogba)
- 若O(nlogba)=f(n),由f(n)=nlogbalogkn计算k,得到T(n)=O(nlogbalogk+1n)
- 若O(nlogba)<f(n),T(n)=f(n)
实例1
T(n)=3T(n/2)+n2
其中a、b分别为3、2,f(n)=n2,则f(n)>nlog23,复杂度为O(n2)
实例2
T(n)=2T(n/2)+nlog(n)
其中a、b分别为2、2,先不考虑f(n)中log(n)项,则f(n)=nlog22logkn=nlog(n),即k=1,复杂度为O(nlog2(n))
实例3
递归斐波那契数列
- 时间复杂度O(2n)
- 空间复杂度O(n)
4、复杂度比较
在实际计算时,若N足够大,则有如下关系
- O(1)<O(log(N))<O(N)<O(N∗log(N))<O(N2)<O(N3)<O(2N)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~