时间复杂度

数量级排序

常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2^n)<Ο(n!)

P和NP问题

其中Ο(log2n)、Ο(n)、 Ο(nlog2n)、Ο(n2)和Ο(n3)称为多项式时间,而Ο(2^n)和Ο(n!)称为指数时间。

计算机科学家普遍认为前者(即多项式时间复杂度的算法)是有效算法,把这类问题称为**P(Polynomial,多项式)类问题,而把后者(即指数时间复杂度的算法)称为NP(Non-Deterministic Polynomial, 非确定多项式)**问题。

**注意:**一般来说多项式级的复杂度是可以接受的,很多问题都有多项式级的解——也就是说,这样的问题,对于一个规模是n的输入,在n^k的时间内得到结果,称为P问题。**有些问题要复杂些,没有多项式时间的解,但是可以在多项式时间里验证某个猜测是不是正确。**比如问4294967297是不是质数?如果要直接入手的话,那么要把小于4294967297的平方根的所有素数都拿出来,看看能不能整除。还好欧拉告诉我们,这个数等于641和6700417的乘积,不是素数,很好验证的,顺便麻烦转告费马他的猜想不成立。大数分解、Hamilton回路之类的问题,都是可以多项式时间内验证一个“解”是否正确,这类问题叫做NP问题。

计算方法

for (i=1; i<=n; i++)  x++;
for (i=1; i<=n; i++)  for (j=1; j<=n; j++)  x++;

只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。
第一个for循环的时间复杂度为Ο(n),第二个for循环的时间复杂度为Ο(n2),则整个算法的时间复杂度为Ο(n+n2)=Ο(n^2)。

简单的程序分析法则:
(1).对于一些简单的输入输出语句或赋值语句,近似认为需要O(1)时间
(2).对于顺序结构,需要依次执行一系列语句所用的时间可采用大O下"求和法则"
**求和法则:**是指若算法的2个部分时间复杂度分别为 T1(n)=O(f(n))和 T2(n)=O(g(n)),则 T1(n)+T2(n)=O(max(f(n), g(n)))
特别地,若T1(m)=O(f(m)), T2(n)=O(g(n)),则 T1(m)+T2(n)=O(f(m) + g(n))
(3).对于选择结构,如if语句,它的主要时间耗费是在执行then字句或else字句所用的时间,需注意的是检验条件也需要O(1)时间
(4).对于循环结构,循环语句的运行时间主要体现在多次迭代中执行循环体以及检验循环条件的时间耗费,一般可用大O下"乘法法则"
乘法法则: 是指若算法的2个部分时间复杂度分别为 T1(n)=O(f(n))和 T2(n)=O(g(n)),则 T1*T2=O(f(n)*g(n))
(5).对于复杂的算法,可以将它分成几个容易估算的部分,然后利用求和法则和乘法法则技术整个算法的时间复杂度
另外还有以下2个运算法则:(1) 若g(n)=O(f(n)),则O(f(n))+ O(g(n))= O(f(n));(2) O(Cf(n)) = O(f(n)),其中C是一个正常数

举例

O(1)

Temp=i; i=j; j=temp;

注意:如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。

O(n^2)

  1. 交换i和j的内容
sum=0;                 (一次)
for(i=1;i<=n;i++)     (n+1次)  for(j=1;j<=n;j++) (n2次)  sum++;            (n2次)

因为Θ(2n2+n+1)=n2(Θ即:去低阶项,去掉常数项,去掉高阶项的常参得到),所以T(n)= =O(n^2);

for (i=1;i<n;i++)  {   y=y+1;         ①     for (j=0;j<=(2*n);j++)      x++;         ②        }

该程序的时间复杂度T(n)=O(n2).
一般情况下,对步进循环语句只需考虑循环体中语句的执行次数,忽略该语句中步长加1、终值判别、控制转移等成分,当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的。

O(n)

与上方雷同,较简单,忽略

O(n^3)

与上方雷同,较简单,忽略

常用的算法的时间复杂度和空间复杂度

**一个经验规则:**其中c是一个常量,如果一个算法的复杂度为c 、 log2n 、n 、 n*log2n ,那么这个算法时间效率比较高 ,如果是2^n ,3^n ,n!,那么稍微大一些的n就会令这个算法不能动了,居于中间的几个则差强人意。

空间复杂度

空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。一个算法在计算机存储器上所占用的存储空间,包括存储算法本身所占用的存储空间算法的输入输出数据所占用的存储空间算法在运行过程中临时占用的存储空间这三个方面。

1.算法的输入输出数据所占用的存储空间是由要解决的问题决定的,是通过参数表由调用函数传递而来的,它不随本算法的不同而改变。

2.存储算法本身所占用的存储空间与算法书写的长短成正比,要压缩这方面的存储空间,就必须编写出较短的算法。

3.算法在运行过程中临时占用的存储空间随算法的不同而异,有的算法只需要占用少量的临时工作单元,而且不随问题规模的大小而改变,我们称这种算法是“就地"进行的,是节省存储的算法;

有的算法需要占用的临时工作单元数与解决问题的规模n有关,它随着n的增大而增大,当n较大时,将占用较多的存储单元。

如当一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1);
当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示为0(log2n);
当一个算法的空间复杂度与n成线性比例关系时,可表示为0(n).

引用:http://blog.csdn.net/zolalad/article/details/11848739

算法的时间复杂度和空间复杂度笔记相关推荐

  1. 常用的排序算法的时间复杂度和空间复杂度

    常用的排序算法的时间复杂度和空间复杂度                                           1.时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出 ...

  2. 关于算法的时间复杂度和空间复杂度的总结

    一.算法的概念   算法(Algorithm)是将一组输入转化为一组输出的一系列计算步骤,其中每个步骤必须能在有限时间内完成.算法是用来解决一类计算问题的,注意是一类问题,而不是一个特定的问题. 二. ...

  3. 【算法的时间复杂度和空间复杂度】-算法02

    算法的时间复杂度和空间复杂度 一个算法的好坏我们主要从"时间"和"空间" 两个维度来衡量 时间维度:是指执行当前算法所消耗的时间,我们通常用 "时间复 ...

  4. 常用的排序算法的时间复杂度和空间复杂度 .

    常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 O(n2) O(n*log2n) 不稳定 ...

  5. 各种常用排序算法的时间复杂度和空间复杂度

    https://blog.csdn.net/jiajing_guo/article/details/69388331 一.常用排序算法的时间复杂度和空间复杂度表格 二.特点 1.归并排序: (1)n大 ...

  6. 【计算机基础】 经常使用的排序算法的时间复杂度和空间复杂度

    经常使用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 高速排序 O(n2) O(n*log2n) 不稳 ...

  7. python排序算法的时间复杂度_Python算法的时间复杂度和空间复杂度(实例解析)

    算法复杂度分为时间复杂度和空间复杂度. 其作用: 时间复杂度是指执行算法所需要的计算工作量: 而空间复杂度是指执行这个算法所需要的内存空间. (算法的复杂性体现在运行该算法时的计算机所需资源的多少上, ...

  8. 算法的时间复杂度与空间复杂度介绍

    本文主要介绍算法的时间复杂度和空间复杂度的相关知识. 1 概述 算法(Algorithm)是指用来操作数据.解决程序问题的方法. 对于同一个问题,使用不同的算法,也许最终得到的结果是相同的,但在执行该 ...

  9. 算法的时间复杂度和空间复杂度总结

    文章目录 前言 算法的时间复杂度和空间复杂度 1.定义 2.计算方法 3.示例 总结 一.什么是时间复杂度? 算法时间复杂度定义: 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进 ...

最新文章

  1. 狄利克雷卷积莫比乌斯反演证明
  2. 人工智能/云原生/数据科学/计算等方向内容整理志愿者招募了!
  3. linux C函数之access函数的用法
  4. 打印机设置虚拟服务器,虚拟机打印机服务器设置
  5. uC/GUI 在Cortex-M3 内核上的移植
  6. 如何判断两个IP地址是不是处于同一网段?
  7. append是什么意思java_关于append()问题
  8. Gartner指明2014年几大战略技术趋势
  9. SDL 从内存流中加载图像并显示
  10. python制作简易动态二维码
  11. android格式化sd卡软件,SD/TF卡格式化程序
  12. 西南石油大学计算机类云南省分数线,2017西南石油大学各专业分数线
  13. 用计算机数字打喜欢你,喜欢你数字怎么表示,“我喜欢你”用数字怎么
  14. ubuntu20.04安装常用的软件
  15. Android实现网络图片app
  16. GB28181 协议实现H5无插件RTMP/HTTP-FLV/HLS直播监控方案 - sfxlab
  17. 信息学奥赛一本通 1348:【例4-9】城市公交网建设问题
  18. [MATLAB]b样条方程基函数方程的表达式, 及n阶基函数作图
  19. 用C语言写钢琴小程序的代码,用C语言编写钢琴小程序
  20. 纸吸管,是下一个环保智商税吗?

热门文章

  1. 架构——12..15——Zabbix 的循序渐进
  2. 最新最快的星座信息查询工具
  3. springboot+mysql美食分享平台-计算机毕业设计源码93084
  4. 【操作系统架构原理】资源管理技术与进程的抽象设计思想
  5. 计算机硬件有哪几类,计算机硬件主要有哪些?
  6. Linux mint 安装步骤
  7. linux mint 17 升级,如何从Linux Mint 17.3升级到Linux Mint 18
  8. MySQL数据分组与查询
  9. 莆田学院计算机系是不是师范类,莆田学院2010会计学、计算机科学与技术拟各招一个海外合作班...
  10. 脱虚向实,加速区块链产业落地 首届全球区块链产业投资洽谈会厦门成功举办