学数据结构和算法的目的 => 实现程序的高速运行,那么必然要了解复杂度。

复杂度分为两个维度:时间、空间。在开发过程中,我们希望时间和内存消耗都越少越好,但很多时候无法做到兼顾,需要在时间和空间之间做出取舍已达到最佳状态。

对复杂度的计算一般采用事前分析估算的方法,即大O表示法。

接下来让我们进入复杂度的学习!

大O表示法——概念


由保罗·巴赫曼在《解析数论》中首先引入。它描述的是一个函数数量级的渐进上界,即算法最坏的情况。

某个算法的复杂度达到了这个问题复杂度的下界,即为最佳算法。

比如:从大小为100的存放数字的数组中找到10,我们需要从头到尾遍历,那么这个是时间复杂度就为 Ο(n),(这里n=100,下面讲解为何为Ο(n))。若10不是数组最后一项,我们在<100次的时候就找到 ,可跳出循环,所以,大O表示法描述的是最坏的情况。

说明:1. 决定算法复杂度的,是执行次数最多的语句;

           2. 复杂度的得出,忽略了常量,低次幂和最高次幂的系数

           3. 加法法则:总复杂度量级最大的那段代码的时间复杂度;

           3. 乘法法则:嵌套代码的复杂度等于内外代码复杂度的乘积

大O表示法——四种常用的时间复杂度


度量一个程序片段的执行时间

度量一个程序的执行时间通常有两种方法

  • 事后统计的方法

  • 事前分析估算的方法  => O 

Ο(1)<Ο(log2(n))<Ο(n)<Ο(n^2)<Ο(n^3)<…<Ο(2^n) 

我们可以用 console.time(''mark)  console.timeEnd(''mark) 来查看执行时间

1. Ο(1):(常数阶)如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数;

let a = 1;
let b = 2;
let temp = a;a = b;
b = temp;

2. Ο(logn):(对数阶)(以2为底n的对数)当数据增大 n 倍时,耗时增大 logn 倍(比如,当数据增大 256 倍时,耗时只增大 8 倍);

例子:二分查找就是 O(logn)的算法,每找一次排除一半的可能。

let i = 1;while(i <= n) {i *= 2; // 每次循环,i变大2倍,即排除一半可能
}

3. Ο(n):(线性阶)数据量的增大几倍,耗时也增大几倍;

for(i = 1; i <= n; i++) {...
}

4.  Ο(n^2):(平方阶)数据量增大 n 倍时,耗时增大 n 的平方倍;

for(i = 1; i <= n; i++) {for(j = 1; j <= n; j++) {...}
}

本文章持续完善中......

大O表示法和时间复杂度相关推荐

  1. JAVA(4)学习笔记:JVM虚拟机上的栈、大驼峰命名法和小驼峰命名法、实参和形参、重载方法、调用栈、递归练习(汉诺塔+斐波那契数列)、数组的定义、数组的初始化、增强for循环。

    接上次的博客:JAVA学习(3)--知识整理以及一些简单程序(猜数字游戏.求各种自幂数.求出一个数字的二进制位中1的个数.获取一个数二进制序列中所有的偶数位和奇数位.求公约数的多种实现方式.输入密码程 ...

  2. 命名规则之大驼峰命名法和小驼峰命名法

    大驼峰命名规则又称骆驼式命名法(Camel-Case),是电脑程式编写时的一套命名规则(惯例).是指混合使用大小写字母来构成变量和函数的名字. 程序员们为了自己的代码能更容易的在同行之间交流,所以多采 ...

  3. 寻找数组中第K大的数,时间复杂度O(N)

    给定一个数组A,要求找到数组A中第K大的数字.对于这个问题,解决方案有不少,此处我只给出三种: 有道题目寻找第K大,我用这3种方法都做了一遍. 方法1: 对数组A进行排序,然后遍历一遍就可以找到第K大 ...

  4. 大驼峰命名法和小驼峰命名法

    前言 我们在做项目的时候,命名格式必须统一,这样才会方便不同人之间的编码阅读!,所以今天就来说一下驼峰命名法! 骆峰式命名法(Camel-Case)是电脑程式编写时的一套命名规则(惯例). 骆峰式命名 ...

  5. 十大经典排序算法时间复杂度和空间复杂度总结

  6. 时间复杂度分析-大O表示法

    开篇词 | 从今天起,跨过"数据结构与算法"这道坎 你好,我是王争,毕业于西安交通大学计算机专业.现在回想起来,本科毕业的时候,我的编程水平其实是很差的.直到读研究生的时候,一个师 ...

  7. 【数据结构与算法-java实现】一 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?

    今天开始学习程序的灵魂:数据结构与算法. 本文是自己学习极客时间专栏-数据结构与算法之美后的笔记总结.如有侵权请联系我删除文章. 我们都知道,数据结构和算法本身解决的是"快"和&q ...

  8. Facebook工程师告诉你,如何正确的阅读《算法导论》(CLRS)?

    第一章 挺有趣的,不过你可以跳过. 第二章 2.1 插入排序--老实说,你应该知道所有主要的排序算法,而不仅仅是插入排序.这只是基本的知识,你永远不知道什么时候有用. 2.2 算法分析--你可以跳过简 ...

  9. 第k大元素(时间复杂度为O(n))

    2201: 第k大元素 [命题人 : yancheng] 时间限制 : 1.000 sec  内存限制 : 128 MB 提交 解决: 156提交量: 1038统计 题目描述 输入一个整数数组,请求出 ...

最新文章

  1. SNMP 协议 OID的使用
  2. 用Leangoo敏捷看板工具管理 产品线路图
  3. 说说Request.Params[key]和Request[key]
  4. Linux Kernel TCP/IP Stack — L3 Layer — netfilter/iptables 防火墙
  5. 为CentOS 7安装VMware-tools
  6. oracle数据库赋权_oracle数据库用户之间授权
  7. Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)
  8. 计算机英语应用研究,计算机英语辅助学习系统的研究与应用-软件工程专业论文.docx...
  9. PHP 显示本机的外网IP
  10. linux文件属性之用户和组基础知识
  11. 软件项目周报模板_一份高质量的职场工作周报,要这样写
  12. 简单的自动更新程序实现
  13. 使用Python把树莓派改造成一个语音助手
  14. 22. Declare data members private
  15. 神舟战神换cpu教程_神舟战神做工如何?神舟战神K650D-A29拆机图解教程
  16. 数据结构(一)、二叉树(BT),二叉查找树(BST),平衡二叉树(AVL树)
  17. java mpeg ps转mpeg-4_MPEG4格式转换器下载_枫叶MPEG4格式转换器(MPEG转换器) 9.0.5.0 共享版_极速下载站...
  18. XSS 之 haozi me 题解——人生第一份CSDN题解
  19. 浅谈C++11标准中的复制省略(copy elision,也叫RVO返回值优化)
  20. 动态表格中点击图片放大

热门文章

  1. java 音频转换_java实现音频转换
  2. 华为云CDN加速服务,如何助企业扬帆远航
  3. 关于大商创安装默认数据清空说明
  4. 关于银环蛇Z370主板的,M.2固态与SATA接口冲突的解决办法
  5. MySQL数据库零基础教学[超详细]
  6. FPS中子弹飞行轨迹随视点位置变化而变化的问题
  7. 关于毕业必须知道的知识之就业、派遣(1)
  8. 2java第一章复习总结
  9. quartz集群模式下qrtz_triggers表trigger_state变ERROR分析
  10. linux内存测试工具memtest,内存检测工具Memtest使用方法(图文教程)