时间复杂度、空间复杂度概念,计算方法解析

【数据结构入门】算法的时间复杂度和空间复杂度详解 【数据结构学习之路】算法的时间复杂度和空间复杂度 文章目录【数据结构学习之路】算法的时间复杂度和空间复杂度(1)算法效率(2)时间复杂度的计算1)什么是时间复杂度2)大O渐进表示法(估算)3)时间复杂度计算实例4)总结5)一些思考(3)空间复杂度的计算(4)常见复杂度对比 本篇前言 在C语言阶段,我们学过了一些排序和查找算法,冒泡排序,快速排序,二分查找等等,哪种算法更好呢,我们如何衡量一个算法的好坏呢?本篇来学习算法的时间复杂度和空间复杂度,相信学完后你就会明白了。 (1)算法效率 算法在编写成可执行 阅读详情

前言❤️❤️

hello hello💕,这里是洋不写bug~😄,欢迎大家点赞👍👍,关注😍😍,收藏🌹🌹
欢迎大家来到数据结构专栏🌹🌹🌹,这篇博客是数据结构专栏的第一篇博客,数据结构是和算法深度绑定的,很多大学这门课叫做《数据结构与算法》,在学习数据结构时,也会随着学习一些高效的算法


这篇博客会详细解析算法评判最基础的两个标准,时间复杂度和空间复杂度🐵
这个专栏的数据结构是代码都是用Java来写的,JavaSE专栏现在已经全部更新完成,铁汁们复习基础知识时非常推荐使用,可以试一下💪💪💪
在这里插入图片描述
🎇个人主页:洋不写bug的博客
🎇所属专栏:数据结构专栏
🎇复习Java基础知识:Java学习之旅,从入门到进阶
🎇铁汁们对于数据结构基础的各种核心知识(不太常用的也有😆),都可以在上面的数据结构专栏学习,专栏正在持续更新中🐵🐵,有问题可以写在评论区或者私信我哦~

1,时间复杂度简介

如果想衡量一段代码的效率如何,那统计这个代码执行完成需要花费多少毫秒肯定是不合适的,因为计算机的配置是有差异的
时间复杂度,就是用来“消除计算机的硬件配置差异”,衡量一段代码执行效率的标准

写一些复杂的代码时,经常涉及到“重复性操作”,时间复杂度就是以重复性操作作为基准单位,衡量重复性操作的执行次数,就可以作为判断代码执行效率的指标

下面这段代码,有for循环和while循环,count++就是一个“重复性操作”,就是一个基准单位

void func1(int N){
    int count = 0;
    for (int i = 0; i < N ; i++) {
        for (int j = 0; j < N ; j++) {
            count++;
        }
    }
    for (int k = 0; k < 2 * N ; k++) {
        count++;
    }
    int M = 10;
    while ((M--) > 0) {
        count++;
    }
    System.out.println(count);
}


count++的执行次数是N ^ 2 + 2N + 10,那这段代码的时间复杂度怎么算呢

当N = 100时,这时候2N + 10相比于N的平方就很小了,在计算时间复杂度时,就会把低次项给直接忽略掉
因此,这段代码的时间复杂度就是O(N^2),时间复杂度并不关心精确的执行次数,只需要粗略知道随着N的增加,执行次数的增长趋势即可



如下所示,count++的执行次数改为4N^2 + 2N + 10,代码的时间复杂度还是O(N ^2),计算时间复杂度时,最高项的系数是不考虑的,因为时间复杂度只需要粗略知道随着N的增加,执行次数的增长趋势即可

void func1(int N){
    int count = 0;
    for (int i = 0; i < 2 * N ; i++) {
        for (int j = 0; j < 2 * N ; j++) {
            count++;
        }
    }
    for (int k = 0; k < 2 * N ; k++) {
        count++;
    }
    int M = 10;
    while ((M--) > 0) {
        count++;
    }
    System.out.println(count);
}



如果执行M + N次,M和N都是未知变量,如下
那么这段代码的时间复杂度就是O(M + N)

void func3(int N, int M) {
    int count = 0;
    for (int k = 0; k < M; k++) {
        count++;
    }
    for (int k = 0; k < N; k++) {
        count++;
    }
    System.out.println(count);
}



代码执行的次数是固定的常数,跟N没关系,如下,count++固定执行100次,可能初学铁汁会认为这里的时间复杂度就是O(100),其实不然
只要是执行次数确定的(也就是执行次数是常数),时间复杂度都是O(1)
因为随着N的增加,执行次数是不会增长的🐵

void func4(int N) {
    int count = 0;
    for (int k = 0; k < 100; k++) {
        count++;
    }
    System.out.println(count);
}

2,冒泡排序的时间复杂度

接着分析下冒泡排序函数的时间复杂度,代码如下:

void bubbleSort(int[] array) {
    for (int end = array.length; end > 0; end--) {
        boolean sorted = true;
        for (int i = 1; i < end; i++) {
            if (array[i - 1] > array[i]) {
                Swap(array, i - 1, i);
                sorted = false;
            }
        }
        if (sorted == true) {
            break;
        }
    }
}

时间复杂度就是看内层循环的次数,稍微观察下,就会发现内层循环的次数是一个等差数列,拿数组的长度当N来看,第一次循环N - 1次,第二次循环N - 2次
以此类推,内层循环总的执行次数就是N - 1 + N - 2 + N - 3 +… + 1
这个根据高中学过的等差数列的和的计算公式,总次数就是0.5N * (N - 1)
那时间复杂度就是O(N ^ 2)



但是,如果数组比较有序的话,那可能中途就通过break跳出循环了,前面计算的是最坏情况下的时间复杂度
如果最好情况下,那就是数组本来就有序,内层循环执行一遍就跳出了,那时间复杂度就是O(N)

这个冒泡排序函数,最坏情况下的时间复杂度是O(N ^ 2),最好情况下的时间复杂度是O(N),其实平均时间复杂度也是O(N ^ 2),这里的平均也就是数组随机打乱来排序,计算出来的(有兴趣的铁汁可以搜下是怎么计算的)

我们是不需要关注考虑平均时间内复杂度是如何计算的,在绝大多数情况下,平均时间复杂度是和最坏时间复杂度是一样的,让计算时间复杂度的时候,直接按照最坏结果计算即可
就好比之前高考填志愿,是考前填的,需要估分,那肯定是要以最近模考最差的一次为参考,会比较稳,以最好的一次做参考肯定是不合适的

3,二分查找的时间复杂度

接着分析下二分查找的时间复杂度,代码如下:

int binarySearch(int[] array, int value) {
    int begin = 0;
    int end = array.length - 1;
    while (begin <= end) {
        int mid = (end + begin) / 2;
        if (array[mid] < value)
            begin = mid + 1;
        else if (array[mid] > value)
            end = mid - 1;
        else
            return mid;
    }
    return -1;
}

二分查找每次while循环中的if执行一次,区间都会缩小一半,也就是每次都能排除一半的元素
计算时间复杂度直接按照最坏情况算,也就是要查找的元素不在数组中,推出2的比较次数次方等于总元素个数

比较次数也就是log2 N,因此,时间复杂度就是O(log2 N)
在计算机中,涉及对数的时间复杂度,大部分情况下都是以2为底的,当以2为底的时候,可以直接省略2不写,写成O(logN)


如果某个算法的时间复杂度是这种对数类型的,就可以认为是一个非常高效的算法
以ln为例(底数是2.7),数据规模是100万时,最多也只需要比较14次,如下图
在这里插入图片描述



而且随着数据规模的大幅增长,执行次数的增长是很少的
就算把数据规模从100万增加到为1亿,会发现执行次数也只是增加了几次而已,如下图
在这里插入图片描述

4,递归下的时间复杂度

有的代码,不一定把循环明面上写出来,而是通过递归的形式
就比如下面这个计算数字阶乘的代码,就是递归调用,这个也算是一种隐形的循环,时间复杂度就是O(N)

long factorial(int N) {
    return N < 2 ? N : factorial(N-1) * N;
}



再比如计算斐波那契数,下面这样写是一个非常低效的写法,传入的数据稍微大一点,计算机就要运行一段时间才能出结果

int fibonacci(int N) {
    return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);
}

这个代码就是每次递归调用都再扩展成两个递归,新扩展出的递归每个再扩展成两个递归
执行次数是2的N次方,时间复杂度就是O(N ^ 2),这个是非常非常高的,已经远远高于O(N ^ 2)了,甚至是O(N ^ 3)了
在这里插入图片描述



计算第50个斐波那契数,要执行的次数如下图,已经是多少亿亿次了😅
在这里插入图片描述

5,空间复杂度

空间复杂度也是通过O来表示的,主要描述的是问题规模N和消耗的空间资源的变化趋势

空间复杂度考虑的是计算机上的内存空间(一般现在买计算机内存空间就是16G,32G这样,内存空间是关机(断电)后就不会保存的),而不是硬盘空间(例如512G,1T,2T这种,关机后数据还能保存)
创建的变量都是在内存上创建的(堆空间和栈空间都是在内存上的)



注:空间复杂度看的是临时占用的空间随着问题规模变化的增长趋势,是不考虑问题本身的存储的

例如下面这段代码,参数传入了长度为N的数组,那数组占用的存储空间,是不计入时间复杂度中的
看的是for循环中的比较逻辑占用的内存空间,这里随着数组规模的增大,就还是那几个变量,并不会占用的内存空间更多,因此下面代码的空间复杂度就是O(1)

void bubbleSort(int[] array) {
    for (int end = array.length; end > 0; end--) {
        boolean sorted = true;
        for (int i = 1; i < end; i++) {
            if (array[i - 1] > array[i]) {
                swap(array, i - 1, i);
                sorted = false;
            }
        }
        if (sorted == true) {
            break;
        }
    }
}



下面代码是计算斐波那契数效率较高的写法,内存空间主要的消耗就是创建了一个数组,随着问题规模变大,消耗的内存空间就会增加
数组的长度为N + 1,时间复杂度就是O(N)

int[] fibonacci(int n) {
    long[] fibArray = new long[n + 1];
    fibArray[0] = 0;
    fibArray[1] = 1;
    for (int i = 2; i <= n ; i++) {
        fibArray[i] = fibArray[i - 1] + fibArray [i - 2];
    }
    return fibArray;
}



下面这个递归计算数字阶乘的代码,每次递归都会创建一个栈帧,递归的深度是N,也就有N份栈帧,空间复杂度也就是O(N)

long factorial(int N) {
    return N < 2 ? N : factorial(N-1) * N;
}



计算斐波那契数的低效写法如下,可能有的铁汁会认为空间复杂度是O(2 ^ N),其实并不是这样
递归时,空间是可以复用的,因此一般只关心最深的递归的递归深度

int fibonacci(int N) {
    return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);
}


如下图,这里最深的递归就是最左边f97线,递归深度是N
因此,低效写法的空间复杂度也是O(N)
在这里插入图片描述

结语

时间复杂度和空间复杂度在数据结构的学习中,会被经常提到
在算法题目中,更多提到的还是时间复杂度(空间复杂度一般关注不多,因为现在计算机的内存空间比较大,不需要在写代码时去刻意节省内存),这关系着代码的执行效率,在蓝桥杯中如果代码时间复杂度过高,就会出现部分用例超时的情况,没办法得到全部的分数

以上就是今天的所有内容啦~完结撒花~🥳🎉🎉
在这里插入图片描述

无人机频谱侦测与智能识别技术实战解析 本文深入解析无人机频谱侦测与智能识别技术实战应用,涵盖无线电侦测、信号处理和定位技术等核心内容。通过频谱分析、特征提取和机器学习算法优化,实现高精度无人机识别与定位,并分享复杂环境下的应对策略和系统集成经验。 阅读详情

相关推荐

如何利用GMS构建地下水数值模拟模型?

第一步:点图中三维网格的图标然后点Grid→Create Grid这个界面是用于创建一个有限差分网格的设置窗口。它允许你定义网格在三维空间中的范围、分辨率以及其他相关属性。这个界面提供了一个直观的方式来定义一个三维的有限差分网格,你需要指定每个维度上的范围、划分的单元格数量,以及一些控制单元格大小分布和网格方向的参数。这个网格通常会被用于数值模拟,例如地下水流模拟。在点击 "OK" 之前,请务必仔细检查所有参数是否符合你的建模需求。1. X-Dimension (X 轴维度)2. Y-Dimension (

weixin_44259522的博客 2093

深入解析计算机科学中的时间复杂度与空间复杂度:基础概念、计算方法及Python示例代码详解

空间复杂度包括算法在运行过程中临时占用的存储空间大小,这包括为变量、输入数据的副本以及调用栈等分配的空间。对于许多算法,特别是那些涉及到大量数据处理的算法,空间效率是一个重要的考虑因素。时间复杂度是一个函数,它定量描述了算法的运行时间如何随着输入大小的增加而增加。例如,如果一个算法的时间复杂度是O(n),这意味着其执行时间与输入数据的大小n成线性关系。这种方法避免了重复计算,并且保持了计算的连续性,从而大大提高了效率。,也就是常数空间复杂度。斐波那契数列是一个经典问题,其数列中的每个数字是前两个数字的和。

lph159的博客 1383

1.5元主控搞定高精度电流电压采集?STC8G1K08+INA180A3硬件设计全解析

本文详细解析了如何利用成本仅1.5元的STC8G1K08单片机与INA180A3电流检测放大器,构建一套高精度、低成本的电流电压采集系统。文章深入剖析了硬件设计精髓,包括利用MCU内部上拉电阻直驱数码管以节省成本、INA180A3的配置与计算,以及实现高频率采集并与上位机高速通信的软件策略,为嵌入式开发中的极致性价比设计提供了完整方案。

weixin_29166013的博客 600

时间复杂度和空间复杂度的概念及各种算法的时间复杂度 及举例

时间复杂度和空间复杂度的概念及各种算法的时间复杂度 及举例 算法的复杂度可分为俩种 一种时间复杂度 另一种是空间复杂度。 俩者的概念:时间复杂度是指执行这个算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。时间和空间(即寄存器)都是计算机资源的重要体现,而算法的复杂性就是体现在运行该算法时的计算机所需的资源多少。 各种算法的复杂度如下: 时间复杂度: 1:算法的时间复杂度反映...

zengxianglei的博客--手指星辰 奈何天! 1万+

贝塞尔曲线原理--曲线生成--路径规划--matlab代码

贝塞尔曲线有着很多特殊的性质, 在图形设计和路径规划中应用都非常广泛, 在路径规划中贝塞尔曲线完全由其控制点决定其形状, n个控制点对应着n-1阶的贝塞尔曲线,并且可以通过递归的方式来绘制.

bob595078694的博客 1万+

基础篇.ARM架构介绍(1)

ARM公司主要向客户提供处理器IP。ARM体系结构是一种硬件规范,主要用来约定指令集、芯片内部体系结构等。以指令集为例,ARM体系结构并没规定每一条指令在硬件IP中如何实现,只是约定了每条指令的格式、行为规范、参数等。

heshuangzong的博客 7803

时间复杂度&空间复杂度分析

时间复杂度:   一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),进而分析f(n)随n的变化情况并确定T(n)的数量级。这里用"O"来表示数量级,给出算法的时间复杂度。                      T(n)=O(f(n));   它表示随着问题规模的n的增大,算法的执行时间的增长率和f(n)的增长率相同,这称作算法的渐进时间复杂度,简称时间复杂度。而我们

Sunnylunch-blog 2万+

Visual Studio Git 使用指南

Visual Studio 2022深度集成了Git功能,提供了直观的图形界面管理源代码。本文详细介绍了VS中Git的使用方法:从环境准备、克隆/创建仓库开始,重点讲解了"Git更改"窗口的日常操作,包括查看修改、暂存文件、提交推送等。同时涵盖了分支管理、查看历史、解决冲突等核心功能,以及储藏、重置等高级操作。文章还提供了实用技巧,如提交规范、频繁提交等最佳实践。VS的Git集成覆盖了日常开发需求,图形界面与命令行可互补使用,适合各层次开发者高效管理代码版本。

guigenyi的专栏 1567

数据结构 算法的时间复杂度与空间复杂度的计算(带有例题讲解)

时间复杂度 对于算法时间复杂度的粉系需要牢记一句话:将算法中基本操作的执行次数作为算法时间复杂度的度量。时间复杂度并不是执行完一段程序的总时间,而是其中基本操作的总次数。 在考试的算法题目中你总能找到一个n,称为问题的规模。如你要处理的数组元素的个数为n,而基本操作所执行的次数是n的一个函数f(n)。对于求其基本操作执行的次数,就是求f(n)。求出以后就可以取出f(n)中随n增大而增大的最快的项,将其系数变为1,作为时间复杂度的度量。 计算时间复杂度的步骤 确定算法中的基本操作以及问题的规模 根据基

是小D吖!的博客 1万+

【文本分析学习】Anaconda+pytorch虚拟环境下的pycharm文本分析(含分词、词性标注、词形归一化、停用词、文本情感分析、词频、文本相似度,附数据代码) NLTK

文本分析学习之 Anadconda+pytorch虚拟环境下的pycharm文本分析(含分词、词性标注、词形归一化、停用词、文本情感分析、词频、文本相似度,附数据代码)

littlexmj的博客 2331

【物联网技术】ESP8266 ESP-01/01s 固件下载烧录+STM32串口通信接线

ESP8266 ESP-01/01s 工作模式接线与MQTT固件下载烧录接线

嵌入式阿齐Archie 3万+

数据结构--时间复杂度和空间复杂度概念及实例

1数据结构 1.1 什么是数据结构? 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。 1.2 什么是算法? 算法(Algorithm):就是定义良好的计算过程,取一个或一组的值作为输入,并产生一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。 2时间复杂度与空间复杂度 2.1 算法效率 算法效率分为两种:一种是时间效率,一种是空间效率。时间效率被称为时间复杂度,空间效率被称为空间复杂度。时间复杂度主

qq_35297945的博客 616

RISC-V CPU设计(三)---多周期CPU的设计与实现

基本情况 本多周期CPU支持RV32I指令集(fence,ecall,ebreak除外),已通过部分指令的测试,如代码有bug,欢迎指出。 模块划分 代码将CPU划分为以下几个模块: 1.控制单元:ControlUnit 用于产生控制信号,是CPU的大脑,指挥中枢。 2.分支决策单元:BranchUnit 用于决定B型指令是否发生跳转 3.立即数单元:ImmUnit 用于从指令中解析出立即数. 4.寄存器堆:RegisterFile RISC-V的32个寄存器,其中x0寄存器恒为0,不可更改。 5.指令存储

qq_40268672的博客 5542

判断斐波那契递归的时间复杂度和空间复杂度以及例题

了解什么是斐波那契数 以及计算他的时间复杂度和空间复杂度 以及相关例题

wutongguo的博客 2210

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

算法分析神奇之时间复杂度、空间复杂度、稳定性

算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。(算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度)。

aaronlanni的博客 665

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

时间复杂度和空间复杂度详解

时间复杂度和空间复杂度详解 目录1.算法效率2.时间复杂度3.空间复杂度 1.算法效率 算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机 行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。 2.时间复杂度 1.时间复杂

qq_49613557的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

时间复杂度和空间复杂度

一、数据结构的基本概念 数据:描述客观事实的符号,是计算机中可以操作的对象,能被计算机识别,并输给计算机处理的符号集合。 数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理,也被成为记录。、 数据对象:是性质相同数据元素的集合,是数据的一个子集 数据项:一个数据元素可以由若干个数据项组成,数据项是数据不可分割的最小单位。 数据结构:相互之间存在一种或者多种特定关系的...

ffsiwei的博客 6万+

Java时间复杂度和空间复杂度(详解)

上述代码用来求n的阶乘,其中,在for前的代码每行执行了一次,在for循环(i++)及其中的代码(ret *= i)每行执行了N-1次,那么该代码总执行了(1+2*(N-1))次,即(2*N-1)次,代码具体执行了多少次,与传入数据n相关。一个算法执行所需要的时间,我们可以将代码跑一遍得到具体的时间,但是如果每一个算法都测试一遍的话,十分耗费时间和精力,而且,其测试的结果高度依赖于测试环境,测试环境中的硬件不同会影响测试结果,测试数据的规模也会影响测试结果。+ N-1,利用等差数列求和公式,可得结果为。

2301_76161469的博客 1036

算法的时间复杂度和空间复杂度

一、简述 算法的优劣,有两个重要的衡量维度: 1️⃣时间维度:是指执行当前算法所消耗的时间,通常用时间复杂度来描述。 2️⃣空间维度:是指执行当前算法所占用的内存,通常用空间复杂度【Space Complexity】来描述。 因此,评价一个算法的效率主要是看它的时间复杂度和空间复杂度情况。时间复杂度不是用来计算程序具体耗时的,空间复杂度也不是用来计算程序实际占用的空间的。 二、时间复杂度T(n) = O(f(n)) 算法的时间复杂度,很多人以为就是该算法程序的运行时间。然而这种结果非常容易受运行环境的影响,

ChineseSoftware的博客 2794

什么是算法。算法的时间复杂度和空间复杂度

还是图书馆的例子,如果一本一本找累死人,要是有个索引,先找哪一类这样会快很多。如何查找其实就是算法。 算法是解决问题步骤的有限集合,通常用某一种计算机语言进行伪码描述。通常用时间复杂度和空间复杂度来衡量算法的优劣。 算法的五大特征:输入、输出、有穷性、确定性、可行性。 输入:零个或多个输入。 输出:一个或多个输出。 有穷性:有限步骤后在可接受时间内完成。 确定性:每个步骤都有确定含义,无二义性。 ...

OneITman的博客 4465

【数据结构】什么是时间复杂度、空间复杂度?看此篇文章足矣

在数据结构中,有着众多的算法,比如查找算法,排序算法等。在查找算法中有顺序查找、折半查找、分块查找等,排序算法中有冒泡排序、快速排序、希尔排序等,而面对这么多的算法,是怎样去衡量算法的执行效率呢?而这也就是此篇文章的重点:时间复杂度和空间复杂度。

@情话 4882

初识JAVA中的包装类,时间复杂度及空间复杂度

在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。实际中我们计算时间复杂度时,我们其实并不一定要计算精确的执行次数。共2n+10,根据大O渐进法,时间复杂度为:O(n)。2^x/1 ==(1)找到的数字。, 其余基本类型的包装类都是首字母大写。,为了在泛型代码中可以支持基本类型,的空间,因为这个也没太大意义,所以。每次开辟,比之前少的一块空间。在修改后的运行次数函数中,空间复杂度算的是变量的个数。

robin_suli的博客 1161

时间复杂度与空间复杂度

【前言】 我们程序员写的代码,代码的质量除了阅读性要好,可扩展性外,更重要的就是耗时要尽量少,占用的内存尽量少。 那么在代码里,耗时多少则用时间复杂度表示,占用的内存多少则可以用空间复杂度表示。 本文只做简单介绍,让不明白的同学明白这两个概念,并不深入。 【时间复杂度】 (1)什么是时间复杂度? 书面的语言不用说太多,说太多反而脑袋晕,最好的解释就是举例说明: 例如:小明和小花...

kaijie713的专栏 131

时间复杂度和空间复杂度简介

算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量; 空间复杂度是指执行这个算法所需要的内存空间。 (算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度)。 简单来说,时间复杂度指的是语句执行次数,空间复杂度指的是算法所占的存储空间 一、时间复杂度 1)时间频度:一...

zhaocen_1230的博客 1323

时间复杂度与空间复杂度详解

时间复杂度与空间复杂度 算法复杂度分为时间复杂度和空间复杂度。 时间复杂度是指执行算法所需要的计算工作量;空间复杂度是指执行这个算法所需要的内存空间。 1.时间复杂度 算法的时间复杂度是一个函数,它定性描述一个算法的运行时间。 一个算法的执行所需要的时间,从理论上来说是算不出来的,必须通过上机测试才能得到,但这并不是说我们对于每个算法都要上机测试,我们只需要知道哪个算法所花的时间多,哪个算法所花的时间少就行。 一个算法花费的时间与算法中的语句执行次数成正比,算法中的语句执行次数越多,它花费的时间就越多。一个

qq_44874062的博客 2689

【数据结构】基于比较的排序算法 - 交换排序

本文介绍交换排序中的冒泡排序与快速排序。冒泡排序通过相邻元素比较交换,实现升序,时间复杂度最坏为O(N²),空间复杂度O(1),稳定且适合小规模有序数据。快速排序采用分治思想,以基准值划分区间,平均时间复杂度O(N log N),空间复杂度O(log N),但不稳定,实际应用中性能优异,可通过随机基准、小区间优化等提升效率。

careathers的博客 329
上一篇: 绕过权限检查,访问修改私有属性,反射,枚举,lambda
下一篇: String类解析(二)可变字符串,经典算法题练习
洋不写bug
博客等级 码龄2年 87粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值