目录

一、时间复杂度

二、算法复杂度


一、时间复杂度 

先看一张图:

(1)时间频度

一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。

(2)时间复杂度

在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时我们想知道它变化时呈现什么规律。为此,我们引入时间复杂度概念。

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。

在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1),另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n2+3n+4与T(n)=4n2+2n+1它们的频度不同,但时间复杂度相同,都为O(n2)。

按数量级递增排列,常见的时间复杂度有:

常数阶O(1),对数阶O(log2n),线性阶O(n),

线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3),...,

k次方阶O(nk),指数阶O(2n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。

2、空间复杂度

与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。记作:

S(n)=O(f(n))

我们一般所讨论的是除正常占用内存开销外的辅助存储单元规模

===

   二、常见算法时间复杂度:

O(1): 表示算法的运行时间为常量

O(n): 表示该算法是线性算法

O(㏒2n): 二分查找算法

O(n2): 对数组进行排序的各种简单算法,例如直接插入排序的算法。

O(n3): 做两个n阶矩阵的乘法运算

O(2n): 求具有n个元素集合的所有子集的算法

O(n!): 求具有N个元素的全排列的算法

优<---------------------------<劣

O(1)<O(㏒2n)<O(n)<O(n2)<O(2n)

时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n2)、立方阶O(n3)、……k次方阶O(nk)、指数阶O(2n)。

===

我们还应该区分算法的最坏情况的行为和期望行为。如快速排序的最 坏情况运行时间是 O(n^2),但期望时间是 O(nlogn)。通过每次都仔细 地选择基准值,我们有可能把平方情况 (即O(n^2)情况)的概率减小到几乎等于 0。在实际中,精心实现的快速排序一般都能以 (O(nlogn)时间运行。

下面是一些常用的记法:

  1. 访问数组中的元素是常数时间操作,或说O(1)操作。
  2. 一个算法如 果能在每个步骤去掉一半数据元素,如二分检索,通常它就取 O(logn)时间。用strcmp比较两个具有n个字符的串需要O(n)时间 。
  3. 常规的矩阵乘算法是O(n^3),因为算出每个元素都需要将n对 元素相乘并加到一起,所有元素的个数是n^2。

指数时间算法通常来源于需要求出所有可能结果。例如,n个元 素的集合共有2n个子集,所以要求出所有子集的算法将是O(2n)的 。指数算法一般说来是太复杂了,除非n的值非常小,因为,在 这个问题中增加一个元素就导致运行时间加倍。不幸的是,确实有许多问题 (如著名 的“巡回售货员问题” ),到目前为止找到的算法都是指数的。如果我们真的遇到这种情况, 通常应该用寻找近似最佳结果的算法替代之。

二、算法复杂度

Q:

对N个数进行排序,在各自最优条件下以下算法复杂度最低的是(   )?

  • 快速排序     nlogn
  • 堆排序         nlogn
  • 冒泡排序     在改良的冒泡下 最优时间复杂度为n
  • 插入排序     最优下n
  • 选择排序     n*n
  • 归并排序     nlogn

http://www.cnblogs.com/minkaihui/p/4077888.html

链接:https://www.nowcoder.com/questionTerminal/b730e61f1fc646a7a33b8700a20bb1c7
来源:牛客网

【牛客网】:数据结构——时间复杂度,算法复杂度相关推荐

  1. 一口气刷完牛客网全部机器学习算法题

    不知道为什么最近突然觉得牛客网很火,好奇心驱使下我也点开看了看...发现真的不错. 机器学习是python新增加的板块,其实只有5道题 哈哈 . ps:题目很简单很基础,真的很适合刚刚入门机器学习的小 ...

  2. 牛客网在线编程----算法入门篇

    标题本篇博文主要是记录下自己的在线编程情况,初次练习,有的算法还待改进,大家有需要可以去牛客网上面多练练! 有需戳–>牛客网在线编程 NC65.题目描述 大家都知道斐波那契数列,现在要求输入一个 ...

  3. 爬虫实现爬取牛客网数据结构试题

    1 目标 爬取牛客网上关于<数据结构>的试题. 试题链接 进入网页可以看到,如果选择<数据结构>的某个知识点组卷,一次最多只能出30题. 因此,想法就是用程序一次将30题全部爬 ...

  4. 牛客网-数据结构笔试题目(六)-最近点对问题求解思路

    题意 我们先来看下题意吧,题意很简单,在一个平面当中分布着n个点.现在我们知道这n个点的坐标,要求找出这n个点当中距离最近的两个点的间距. 分治法 如果我们仔细思考一下,会发现这个问题和排序其实非常类 ...

  5. 牛客网编程题python_牛客网数据结构练习题

    第一次使用牛客做编程题,刚开始不了解如何输入输出,查了查才知道.我用的是语言是 Javascript v8 6.0.0 readline() 表示得到输入的字符串,如果是多行的话,每readline一 ...

  6. 牛客网-数据结构笔试题目(七)-k-amazing数字求解

    题意 给定n个数构成的数字,我们定义一个k-amazing数的概念.如果数a同时出现在数组中所有k个连续元素构成的序列当中,并且a是其中最小的那个,那么就称为a是一个k-amazing数字. 我们抽象 ...

  7. 牛客网-数据结构笔试题目(一)-猫咪特征提取思路解析(附源码)

    题意 小明是一名算法工程师,同时也是一名铲屎官.某天,他突发奇想,想从猫咪的视频里挖掘一些猫咪的运动信息.为了提取运动信息,他需要从视频的每一帧提取"猫咪特征".一个猫咪特征是一个 ...

  8. 牛客网 链表结构 算法相关内容

    链表结构 单链表的节点结构  由以下结构的节点依次连接起来所形成的链叫单链表结构 Clas Node<V>{ V value; Node next; } 双链表的节点结构 由以下结构的节点 ...

  9. 牛客网-数据结构笔试题目(八)-离子能力跃迁问题求解

    题意 有一个人在玩一个离子激活的游戏,题目的背景是模拟的化学当中的离子能量跃迁.在化学当中,离子吸收能量可以从低能态跃迁到高能态,并且放出一定的能量. 现在有N粒离子排成一排(下标1-N),每一个离子 ...

  10. 牛客网-数据结构笔试题目(四)-Powerful Ksenia问题解决方案(附源码)

    题意 现在我们想要在n步这样的神奇异或操作之内让数组当中的所有元素全部相等,请问这一点是否可能呢?首先输出YES或NO,表示是否有解.如果有解输出需要操作的步数,以及对应选择的元素下标. 样例 在第一 ...

最新文章

  1. IP Header包
  2. 如何在Java中编写正确的微基准测试?
  3. Fragment详解之二——基本使用方法
  4. golang实现生产者和消费者
  5. r语言 断轴 画图_R语言作图——Density plot
  6. 全球再迎超级飓风,黑客可利用微软“蠕虫级”高危漏洞暴击全球
  7. 数据治理的陷阱与解决方案
  8. 聊聊lettuce的sentinel连接 1
  9. sql或oracle插入数据时进行md5加密
  10. 怎么下c语言程序,最新VC++(c语言程序下载安装)下载地址电脑版-CC软件
  11. 上海市职称英语计算机报名,全国职称计算机考试
  12. (附源码)springboot校园疫情智慧防控微信小程序 毕业设计 011133
  13. 360随身wifi,不通过360wifi软件,直接运行网卡模式
  14. linux内核溢出利用,窖藏15年新鲜出炉的Linux内核漏洞
  15. ajax的readystate为3,为什么在做ajax时无法获得readyState 3(why can't get readyState 3 when doing a ajax)...
  16. itest软件测试工具,Monkey测试工具 - iTest99的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  17. html css设计页眉页脚,如何使用CSS制作此页眉/内容/页脚布局?
  18. android studio秘钥库文件不存在,获得SHA1以及错误java.lang.Exception: 密钥库文件不存在: keystore...
  19. 怎样给计算机设置屏幕锁,怎么给电脑设置锁屏密码
  20. windows7以上平台NDIS6框架的NDIS协议驱动开发

热门文章

  1. 完成蓝蜂浏览器的框架重构
  2. k邻近算法(KNN)实例
  3. (转)Awk使用案例总结(运维必会)
  4. Velocity中避免null引起的数据问题
  5. 原生JavaScript对CSS进行格式化和压缩
  6. 专注于分布式存储计算技术及其应用url http://www.nosqlnotes.net/
  7. mysql user表字段详解_Mysql User表权限字段说明全介绍
  8. ggsci | ggplot2的颜色标度拓展包(1):科研配色风格
  9. jquery解析php json,使用jQuery解析PHP Json对象.
  10. php 按位左移,PHP位运算符