(1)、把输入规模看成x轴,所花时间/空间看成y轴

O(n)就是y=x,y随x的增长而线性增长。也就是成正比,一条斜线。

O(1)就是y=1,是一个常量,不管x怎么变,y不变,一条与x轴平行的线。

(2)、举个简单的例子,要从0加到n,我们会这么写:

int sum = 0;
for(int i = 0;i<=n;++i) {
sum + = i;
}

一共算了n次加法,那么就说这个时间复杂度是O(n)。当然O(n)的精确的概念是,是n的最高次方,比如,某个计算共计算了3n+2次,那么这个时间复杂度也是O(n),因为3n+2中的最高次方是n。

如果代码这么写:

int sum = 0;
for(int i = 0;i<= n;i++) {
for(int j = 0;j<= n;j++) {
sum + = (i + j);
}
}

  

很明显一共算了n^2次加法,那么就说这个时间复杂度是O(n^2),和这个上面的类似,如果某个算法计算了3*n^2+n+1次,其时间复杂度仍然是O(n^2),因为3*n^2+n+1中的最高的次方是n^2,所谓O1就是计算的次数是常量,我们还以上面从0到n的例子来说,如果我们用等差数列的公式,那么,代码可以这么写:

int sum = n*(n+1)/2

不管n有多大(当然不能溢出了),通过上面的公式只需要计算一次,也就是说计算的次数是不变的,这种情况的时间复杂度就可以说成O(1),再比如这个计算,不管其他条件如何变化,均只计算5次就能计算出结果,那么这种情况就是时间复杂度,也就是O(1)。

(3)、

要在hash表中找到一个元素就是O(1)

要在无序数组中找到一个元素就是O(n)

访问数组的第n个元素是O(1)

访问链表的第n个元素是O(n)

也就是说:

如果实现中没有循环就是O(1)

如果实现中有一个循环就是O(n)

(4)、算法复杂度:算法复杂度分为时间时间复杂度和空间复杂度。其作用是:时间复杂度是度量算法执行时间的长短;而空间复杂度是指算法所需存储空间的大小。

时间复杂度On和空间复杂度O1是什么意思?的更多相关文章

  1. 某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C/C++代码求出这两个单身整数。 要求: 时间复杂度o(n), 空间复杂度o(1)------某公司招聘试题

    先看看这个题目:某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C代码求出这两个单身整数. 要求: 时间复杂度o(n), 空间复杂度o(1). 我们先用最傻瓜的方式来做吧: #inc ...

  2. 反转链表,时间复杂度O(n),空间复杂度O(1)

    原理:使用三个指针,p,q指向交换的元素,r指向后续元素 代码如下: class Node{ int data; Node next; Node(int data){ this.data=data; ...

  3. 时间复杂度O(n),空间复杂度O(1)解斐波那契数列

    #include <stdio.h> #include <iostream> using namespace std; long long fibs1(int in_iN) { ...

  4. (转载)o(1), o(n), o(logn), o(nlogn) 时间复杂度

    o(1), o(n), o(logn), o(nlogn) 时间复杂度的解释: https://blog.csdn.net/yhc166188/article/details/81162865 时间复 ...

  5. C#中常用的排序算法的时间复杂度和空间复杂度

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

  6. 数据结构中常用的排序算法 && 时间复杂度 && 空间复杂度

    第一部分:数据结构中常用的排序算法 数据结构中的排序算法一般包括冒泡排序.选择排序.插入排序.归并排序和 快速排序, 当然还有很多其他的排序方式,这里主要介绍这五种排序方式. 排序是数据结构中的主要内 ...

  7. 给定一数组,输出满足2a=b(a,b代表数组中的数)的数对,要求时间复杂度尽量低。

    //时间复杂度O(n),空间复杂度O(n) void findSequence(int* arr, int len) { int* hashtable = new int[RANGE]; memset ...

  8. 动态规划小结 - 一维动态规划 - 时间复杂度 O(n),题 [LeetCode] Jump Game,Decode Ways

    引言 一维动态规划根据转移方程,复杂度一般有两种情况. func(i) 只和 func(i-1)有关,时间复杂度是O(n),这种情况下空间复杂度往往可以优化为O(1) func(i) 和 func(1 ...

  9. 聊聊Mysql索引和redis跳表 ---redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里)

    redis使用跳表不用B+数的原因是:redis是内存数据库,而B+树纯粹是为了mysql这种IO数据库准备的.B+树的每个节点的数量都是一个mysql分区页的大小(阿里面试) 还有个几个姊妹篇:介绍 ...

随机推荐

  1. php基础-6

    类的继承和方法重写 <?php class people{ public function __construct($name, $age, $sex) { $this->age = $a ...

  2. YIT-CTF—社工类

    下载图片

  3. vue的理解

    vue提供的MVVM框架模式的数据双向绑定,实现了HTML和js的代码分离,提高代码的维护性 vue.js的核心思想包括:数据驱动和组件化思想. 如果没有中间的ViewModel则关系图编程下面所示: ...

  4. crontab 例子

    一个简单的 crontab 示例 0,20,40 22-23 * 7 fri-sat /home/ian/mycrontest.sh 在这个示例中,我们的命令在 7 月的每个星期五和星期六晚上 10 ...

  5. redis源码之压缩列表ziplist

    压缩列表ziplist1.简介连续,无序的数据结构.压缩列表是 Redis 为了节约内存而开发的, 由一系列特殊编码的连续内存块组成的顺序型(sequential)数据结构. 2.组成 属性 类型 长 ...

  6. linux查看网络信息命令

    #遇到一条很长的命令怎么办,想换行的时候在末尾增加\符号就可以换行继续输入命令了 #在ifconfig内容中找出ip [root@bogon ~]# ifconfig ens33|grep " ...

  7. centos 7 lvs 负载均衡搭建部署

    环境: 在vm里开三个虚拟机 负载调度器:10.0.3.102 真实服务器1:10.0.3.103 真实服务器2:10.0.3.104 虚拟ip: 10.0.3.99 (用来飘移) 负载调度器上 if ...

  8. MSP430F2272 Flash

    The collected information is listed below during flash of MSP430 development. MSP430F2272: 32KB + 25 ...

  9. 05typedef struct用法详解与小结

    1.基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等). 在编程中使用typedef ...

  10. 记一次服务器路由跟踪 (2019-01-23 TODO)

    记一次服务器路由跟踪 有用户反馈网站 无法访问. 现象如下: ping 没有反馈,确认了可以 ping 通其它的网站. tracert 跟踪到服务器商的内部就没的反应了. 同样一家的服务器商,另外一台 ...