算法复杂度计算

算法复杂度计算

一、基础

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),变量ab使用两个存储空间 -> 2O(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

其中ab分别为3、2,f(n)=n2,则f(n)>nlog23,复杂度为O(n2)

实例2

T(n)=2T(n/2)+nlog(n)

其中ab分别为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(Nlog(N))<O(N2)<O(N3)<O(2N)
posted @   lovekey  阅读(289)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示