当前位置: 首页 > article >正文

【时间复杂度和空间复杂度】

时间复杂度和空间复杂度

  • 1、时间复杂度
      • 1.1、常见的时间复杂度案例
    • 1.2、时间复杂度大小对比图
  • 空间复杂度
      • 1.1、常见的空间复杂度案例
  • 理解

1、时间复杂度

1、什么是时间复杂度?

  • 算法的执行效率
  • 算法的执行时间与算法的输入值之间的关系

2、什么是大O表示法?

  • O(N),其中N指的是例1中的numN = num

【例1:】

def test(num):
    total = 0             # 执行时间为:a;
    for i in range(num):
        total += i        # 执行时间为:b;num次为:num * b;
    return total          # 执行时间为:c;
# 所以test类的时间复杂度 = a + num * b + c

所以当num很大时,那么test类的时间复杂度主要基于num * b。那么例1中对时间复杂度影响最大的就是这个for循环。最后定义例1的时间复杂度为O(N)

1.1、常见的时间复杂度案例

常见的时间复杂度: O ( 1 ) O(1) O(1) O ( l o g n ) O(logn) O(logn) O ( n ) O(n) O(n) O ( n l o g n ) O(nlogn) O(nlogn) O ( n 2 ) O(n^2) O(n2)
【例2: O ( 1 ) O(1) O(1)

def o1(num):
	i = num         # 执行时间为:a;
	j = num * 2     # 执行时间为:b;
	return i + j    # 执行时间为:c;
# 所以o1类的时间复杂度 = a + b + c,为常量,和num的个数无关

定义例2的时间复杂度为O(1)
【例3: O ( N ) O(N) O(N)

def ON(num):
    total = 0             # 执行时间为:a;
    for i in range(num):
        total += i        # 执行时间为:b;num次为:num * b;
    return total          # 执行时间为:c;
# 所以test类的时间复杂度 = a + num * b + c,和num的个数有关

定义例3的时间复杂度为O(N)
【例4: O ( l o g N ) O(logN) O(logN)

def OlogN(num):
    i = 1             # 执行时间为:a;
    while (i < num):
        total = i * 2        # 执行时间为:b;X次为:num = i*2^X,X = log2(num/i)
    return i         # 执行时间为:c;
# 所以test类的时间复杂度 = log2(num/i),和num的个数有关,因为i为常数,可忽略

定义例4的时间复杂度为O(logN)
【例5: O ( N + M ) O(N + M) O(N+M)

def ON(num1, num2):
    total = 0             # 执行时间为:a;
    for i in range(num1):
        total += i        # 执行时间为:b;num次为:num1 * b;
    for i in range(num2):
        total += i        # 执行时间为:b;num次为:num2 * b;
    return total          # 执行时间为:c;
# 所以test类的时间复杂度 = a + num1 * b + num2 * b + c,和num的个数有关

定义例5的时间复杂度为O(N + M)

【例6: O ( N l o g N ) O(NlogN) O(NlogN)

def OlogN(num):
    i = 1             # 执行时间为:a;
    for i in range(num1):         # 执行 num1次
    	while (i < num2):
        	total += i + j        # 执行时间为:b;X次为:num2 = i*2^X,X = log2(num2/i)
        	j = j * 2
    return i         # 执行时间为:c;
# 所以test类的时间复杂度 = (num1)*log2(num2/i),和num的个数有关,因为i为常数,可忽略

定义例4的时间复杂度为NO(logN)
【例5: O ( N + M ) O(N + M) O(N+M)

def ON(num1, num2):
    total = 0             # 执行时间为:a;
    for i in range(num1):
    	for i in range(num2):
        	total += i + j        # 执行时间为:b;num1 * num2次为:num1 * num2 * b;
    return total          # 执行时间为:c;
# 所以test类的时间复杂度 = a + num1 * num2 * b + c,和num的个数有关

定义例4的时间复杂度为 O ( N 2 ) O(N^2) O(N2)

1.2、时间复杂度大小对比图

在这里插入图片描述

时间复杂度从大到小排列: O ( N ! ) O(N!) O(N!) > O ( 2 N ) O(2^N) O(2N) > O ( N 2 ) O(N^2) O(N2) > O ( N l o g N ) O(NlogN) O(NlogN) > O ( N ) O(N) O(N) > O ( l o g N ) O(logN) O(logN) > O ( 1 ) O(1) O(1)

空间复杂度

1、什么是空间复杂度?

  • 算法的存储空间与算法的输入值之间的关系(占空间的都是我们申明的变量)

2、大O表示法?

  • O(N),其中N指的是例1中的numN = num

1.1、常见的空间复杂度案例

在这里插入图片描述
常用的空间复杂度就这两种。

理解

空间复杂度一般指的就是磁盘空间,所以工作中一般优先时间复杂度。


http://www.kler.cn/a/14066.html

相关文章:

  • HTML5 <meter> 标签、HTML5 <mark> 标签
  • PHP调用淘宝app商品详情原数据 API 接口
  • 大家经常说的java八股文到底是什么?让我来总结一下吧!
  • 操作指南|如何创建x-chain DAO
  • 静态和动态NAT,NAPT配置简介
  • vue 知识储备
  • 大数据知识总结
  • 5.0、Java继承与多态 - 接口的相关特性
  • 免费文案生成器-免费文案改写神器
  • Python中的多进程编程与实例,多进程复制文件
  • Matlab 绘制双纵轴三纵轴图
  • spring getway的配置
  • iptables表、链、规则
  • 通过docker发布项目
  • 14个WooCommerce商城网站必备插件
  • 3年自动化测试(心路历程),从月薪10k到30k我经历了什么?
  • MCMC采样
  • 理解Java程序的执行
  • 020:Mapbox GL加载高德地图(影像瓦片图)
  • 一个AK/SK泄露检测的实现思路