ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

时间复杂度总结

2021-09-25 01:04:35  阅读:199  来源: 互联网

标签:总结 递归 渐进 复杂度 leq 时间 quad 常数


描述时间复杂度的渐进记号

Θ

定义:

\[f(n)=\Theta(g(n))\\ \exist c_1,c_2,n_0,使得:\forall n\geq n_0,有 0\leq c_1g(n)\leq f(n)\leq c_2g(n) \]

即存在常数c1,c2,使得在n足够大(n>n0)的时候,f(n)能被夹在c1g(n),c2g(n)中间,称g(n)f(n)的渐进紧确界。Θ符号确定了一个函数的渐进上界和下界,即时间复杂度定为g(n)的常数倍。

O

定义:

\[f(n)=O(g(n))\\ \exist c,n_0,使得:\forall n\geq n_0,有 0\leq f(n)\leq cg(n) \]

即存在常数c,使得在n足够大(n>n0)的时候,f(n)的上界是cg(n)O符号确定了一个函数的渐进上界,这个上界可能是渐进紧确的,也可能不是,即最坏情况下复杂度为c*g(n),但是不一定取到最坏情况。通常都采用O符号表示算法的时间复杂度。

o

定义:

\[f(n)=o(g(n))\\ \forall c,\quad \exist n_0,使得:\forall n\geq n_0,有 0\leq f(n)< cg(n) \]

即存对于任意常数c,均有在n足够大(n>n0)的时候,f(n)会小于cg(n)o符号确定了一个函数的渐进上界,这个上界不是渐进紧确的,即复杂度一定不超过g(n),即使在最坏情况下也达不到g(n)的程度。

Ω,ω

O,o类似,Ω,ω分别定义了f(n)的渐进下界和渐进非紧确下界,不过使用比较少,不多论述。

时间复杂度的计算

循环为主的算法,一般直接计算循环次数即可。

而对于递归算法,要写出递归式,然后求解,令T(n)表示规模为n的数据的运行时间。大致可以分成两种情况

  1. T(n)=T(n-a)+f(n)。即每次递归将问题规模缩小一个常数。这种情况一般直接将公式整体展开求级数和即可,即使不能求精确解也能利用放缩估计上界。不过并不是所有类似的递归式都能如此求解(如暴力递归计算斐波那契数列的算法的时间复杂度)。
  2. T(n)=aT(n/b)+f(n)。即每次递归将问题规模缩小常数倍,并分解成若干个缩小规模的子问题,每次需要f(n)的时间求解,合并,分解。这种情况一般用主定理求解

主定理(简化版本):

\[令f(n)=\Theta(n^d)\\ if \quad d>log_b(a),\quad T(n)=O(n^d)\\ if \quad d=log_b(a),\quad T(n)=O(n^d*log(n))\\ if \quad d<log_b(a),\quad T(n)=O(n^{log_b(a)}) \]

标签:总结,递归,渐进,复杂度,leq,时间,quad,常数
来源: https://www.cnblogs.com/cryingrain/p/15333190.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有