如何理解算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等?

2018年10月30日 00:09:14 JackLiu16 阅读数 127

时间复杂度这个东西,其实更准确点说应该是描述一个算法在问题规模不断增大时对应的时间增长曲线。所以,这些增长数量级并不是一个准确的性能评价,可以理解为一个近似值,时间的增长近似于logN、NlogN的曲线。

先从O(1)来说,理论上哈希表就是O(1)。因为哈希表是通过哈希函数来映射的,所以拿到一个关键字,用哈希函数转换一下,就可以直接从表中取出对应的值。和现存数据有多少毫无关系,故而每次执行该操作只需要恒定的时间(当然,实际操作中存在冲突和冲突解决的机制,不能保证每次取值的时间是完全一样的)。举个现实的例子,比如我的身后有一排柜子,里面有香蕉(代号B),苹果(代号A),葡萄(G),现在你说A,我迅速的就把苹果递过来了;你说B,我迅速就把香蕉递过来了。就算你再增加菠萝(P)、火龙果(H),但是你说一个代号,我递给你相应的水果这个速度是几乎不会变的。

至于O(n),这个就是说随着样本数量的增加,复杂度也随之线性增加。典型的比如数数。如果一个人从1数到100,需要100秒,那么从1到200,基本上不会小于200秒,所以数数就是一个  复杂度的事情。一般来说,需要序贯处理的算法的复杂度,都不会低于O(n)。比如说,如果我们要设计一个算法从一堆杂乱的考试的卷子里面找出最高的分数,这就需要我们从头到尾看完每一份试卷,显然试卷越多,需要的时间也越多,这就是一个O(n)复杂度的算法。

而O(n²)是说,计算的复杂度随着样本个数的平方数增长。这个例子在算法里面,就是那一群比较挫的排序,比如冒泡、选择等等。沿着我们刚才的说的那个试卷的例子,等我们找出最高的分数之后,放在一边另起一堆,然后用同样的方法找第二高的分数,再放到新堆上…… 这样我们做n次,试卷就按照分数从低到高都排好了。因为有n份试卷,所以这种翻试卷,找最高分的行为,我们要做n次,每次的复杂度是O(n),那么n个O(n)自然就是O(n²)。

在比如说构建一个网络,每个点都和其他的点相连。显然,每当我们增加一个点,其实就需要构建这个点和所有现存的点的连线,而现存的点的个数是n,所以每增加1,就需要增加n个连接,那么如果我们增加n个点呢,那这个连接的个数自然也就是n²量级了。

无论是翻试卷,还是创建网络,每增加一份试卷,每增加一个点,都需要给算法执行人带来n量级的工作量,这种算法的复杂度就是(n²) 。

然后是O(nlogn)  ,这恐怕是常见算法复杂度里面相对最难理解的,就是这个log怎么来的。前面那个n,代表执行了n次log(n)的操作,所以理解了log(n),就理解了nlog(n)。

O(logn)的算法复杂度,典型的比如二分查找。设想一堆试卷,已经从高到底按照分数排列了,我们现在想找到有没有59分的试卷。怎么办呢?先翻到中间,把试卷堆由中间分成上下两堆,看中间这份是大于还是小于59,如果大于,就留下上面那堆,别的丢掉,如果小于,就留下下面那堆,丢掉上面。然后按照同样的方法,每次丢一半的试卷,直到丢无可丢为止。

详见https://www.zhihu.com/question/21387264

出处:https://blog.csdn.net/qq_34229351/article/details/80841482?utm_source=blogxgwz0

如何理解算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等?相关推荐

  1. 算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等是什么意思?

    提出问题(在做功能时遇到的):为什么,O(1).O(n)的概念又是什么 Java中  Set 和 List 集合  的contains()方法,检查数组链表中是否包含某元素 检查数组链表中是否包含某元 ...

  2. 如何去理解算法时间复杂度?

    如果你之前对此有过一面之缘,那么这里可以帮你加深你的印象.如果你是初学,那么这里可以帮助你理解.在想要理解时间复杂度之前,我们先来了解一下算法. 算法是什么? 算法(algorithm),在数学(算学 ...

  3. 分析算法时间复杂度---渐进表示法

    一.前置疑问 Q1.为什么要学习算法 Q2.满足什么条件才能说这是一个好算法 Q3.如何分析算法 二.学习内容 1.什么是算法 算法不一定是程序,只有当用计算机程序是设计语言描述时,才是程序. 解决一 ...

  4. 算法时间复杂度的渐近表示法

    基础知识点 一个算法的时间复杂度,指算法运行的时间. 假设数据输入规模是n,算法的复杂度可以表示为f(n)的函数 接受上界不接受下界 大O记号(不唯一)(一般找最邻近它的那个) 假设f(n)和g(n) ...

  5. 大话数据结构之算法 时间复杂度

    http://www.cnblogs.com/danyingjie/archive/2011/11/17/2252466.html 时间复杂度用O()来体现,我们称之为大O记法.记做:T(n)=O(f ...

  6. 算法时间复杂度分析——大O、大Ω、大θ、小o,小ω

    最近开始转战传统算法分析的研究工作了,重新拾起以前学过的一些内容. 目录 一.概述 二.对常见的Ο和Ω进行分析 2.1 大O表示法 2.2 大Ω表示法 三.P问题,NP问题,NP-hard问题,NPC ...

  7. 排序算法-算法时间复杂度和空间复杂度概念 详细讲解

    排序算法-算法时间复杂度和空间复杂度概念 详细讲解 排序算法的介绍 排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类: 1)内部排序: 指将 ...

  8. 七、排序算法时间复杂度和空间复杂度介绍

    文章目录 一.排序算法的介绍 二.排序的分类 三.算法的时间复杂度 3.1 度量一个程序(算法)执行时间的两种方法 3.2 时间频度 3.3 时间复杂度 3.4 常见时间复杂度 3.5 平均时间复杂度 ...

  9. 常见算法思想——穷举法

    常见算法思想--穷举算法 简单介绍 详细介绍 算法思路 算法特点 算法优化 实例演示 题目描述 题目分析 完整代码 简单介绍   在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结 ...

最新文章

  1. 高性能计算中并行的概念理解
  2. 数组的filter()方法
  3. python中怎样获得unicode_如何在Python中获取unicode月份名称?
  4. Flash网络游戏简单的源代码
  5. 自我救赎,成就希望——小说《致加西亚的信》的读后感范文3400字
  6. win10计算机打开之后隐藏3d对象视频,Win10系统隐藏/删除此电脑中的3D对象文件夹的方法...
  7. JavaScript与C#互通的DES加解密算法
  8. 小程序 php cookie,微信小程序模拟 cookie
  9. 通过数据分析改进并达成SEO优化目标
  10. 华科尔d10设置教程_华科尔D10刷Deviation设置参数求教
  11. mysql 复制数据文件_mysql数据库搬家,可以直接复制数据库文件吗
  12. 手机变板砖?这有专业救砖教程
  13. java 实现概率事件,实现指定概率的随机事件
  14. 基于JAVA读书网络社区设计计算机毕业设计源码+系统+lw文档+部署
  15. java语言程序设计勇_自考Java语言程序设计(一)串讲笔记
  16. 讯众及时会:打造新一代云视讯产品 完善智能通信产业链
  17. 解决新能源充电难!小桔充电牵手南网电动,共建充电场站
  18. 基于java+ssm教学质量评价系统(学生评教)-计算机毕业设计
  19. 使用MySQL Workbench导出数据库脚本以及出错时的解决办法
  20. PMP是什么?有等级之分吗?

热门文章

  1. AC/DC开关电源简介
  2. 模切产品在不同领域上的应用
  3. 栋感光波-冲刺日志(第8次)
  4. 要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9) 也不相同,每个字符串长度为10;
  5. 白盒测试之基本路径/线性无关路径概念
  6. Brain Tumor Segmentation (BraTS) 脑部肿瘤分割1--数据篇
  7. JavaScript指南针系列收录(一)
  8. 马蜂窝 IM 系统架构的演化和升级
  9. 苹果电脑怎么更换计算机模式,MAC电脑Command键怎么调换为Control键?
  10. 创新工场 SLAM算法工程师 招聘贴