空间复杂度(快速排序空间复杂度)

空间复杂度

空间复杂度是对程序执行过程中临时占用空间大小度量的指标,一般空间复杂度表示为S(n) = O(f(n)),其中n表示输入规模,fn表示一段程序代码。

空间复杂度和时间复杂度的有类似的情形如下

常量空间

常量空间的意思是该场景空间复杂度和输入规模n无关,那么常量空间的空间复杂度就可以表示为S(n) = O(1),类似如下代码

 public void methond1(int n){
     int m = 3;
 }

线性空间

线性空间一般和数组有关,如下代码,存在一个一维数组,那么该数组的大小和输入规模n成正比,所以该场景空间复杂度可以表示为S(n) = O(n)。

 public void methond2(int n){
     String[] arr = new String[n];
 }

二维空间

当程序的内存占用为一个二维数组,如下代码,该二维数组和输入规模n是平方的关系,空间复杂度可以表示为S(n) = O(n2)。

 public void methond3(int n){
     String[][] arr = new String[n][n];
 }

递归空间

以JAVA语言为例,在程序运行过程中会给当前运行的线程开辟一片内存空间,称为栈,方法调用过程就是压栈操作和出栈操作的过程,而递归简而言之就是当进入方法开始压栈,当方法返回就开始出栈,代码如下

 public void methond4(int n){
     if (n<=1){
         return;
     }
     methond4(n-1);
 }

所以该场景的空间复杂度就是栈的深度,也就是输入规模n那么这里的空间复杂度可以表示为S(n) = O(n)。

空间复杂度和时间复杂度的取舍

空间复杂度和时间复杂度虽然都是衡量一个算法好坏的标准,但是空间复杂度在这个硬件飞速发展的时代显然没有时间复杂度那么的关键,因为内存空间越来越便宜,在时间复杂度和空间复杂度对比下上明显会偏重于时间复杂度。

所以我们在工作中往往会给程序多分配一些内存空间,也要提升程序的执行速度。

相关文章

Java开发中的高阶函数应用:让代码更优雅

Java开发中的高阶函数应用:让代码更优雅高阶函数,这个概念听起来很高级,但实际上在Java开发中已经变得越来越常见。它就像一位魔法师,能让我们的代码变得更加简洁和高效。今天,我们就来聊聊Java中的...

java Math类和Random类的用法(java random())

/*** 测试Math类的常用方法* 测试Random类*/public class TestMath { public static void main(String[] args) { int a...

系统性能优化与Java代码编写性能考虑

一 、性能与性能优化性能指的是衡量系统是否能满足用户及技术管理需求的一组指标。性能优化是为了使这些指标能够达到用户及管理的目标,而对系统进行的一系列改进过程。作为信息系统的一项重要工作,性能优化过程将...

一机集团:能碳一体化管控平台为行业绿色转型树立新标杆

作为国家“一五”期间重点建设的军工骨干企业,一机集团在“十四五”期间交出了一份亮眼的绿色答卷:综合能耗下降33.3%,可比价万元产值综合能耗下降3.47%,超额完成能耗“双控”目标。如今,一机集团再次...

嵌入式C语言基础编程—5年程序员给你讲函数,你真的懂函数吗?

本文主要是对C基础编程关于函数的初步讲解,后续会深入讲解C高级相关的概念(C大神可先略过)。 本人近期会陆续上传IT编程相关的资料和视频教程,可以关注一下互相交流:C C++ Java python...

Java8 Stream流操作深度解析(java stream split)

Java8 Stream流操作深度解析提到Java8,你脑海里第一个浮现的是什么?是Lambda表达式?还是Optional类?其实,Java8引入的Stream API也是相当重要且强大的特性之一。...