【零基础学算法第二讲】算法的空间复杂度

在做题过程中会遇到一些空间限制,如下图的“内存限制”为128MB。这个128MB就限制了如果我们不开栈、没有递归、只开int数组的情况下,只允许将数组开到 1 0 7 10^7 107这样的数量级。这个数字是怎么得到的呢
在这里插入图片描述

前置知识

表示内存大小的几个单位

内存的最小单元是一根导线,我们可以用通电来表示1,断电来表示0,也就是一根线只能表示两个数字,故内存使用的是二进制。我们将一根线称作一个二进制位(1 bit)

表示内存大小的单位有:bit、Byte、KB、MB、GB、TB

其中部分单位解释如下:

单位 含义 名称 换算
bit 一个二进制位 比特
Byte 八个二进制位 字节 8 bit = 1 Byte
KB 1024个字节 千字节 1024 Byte = 1 KB
MB 比KB高一级的单位 兆字节 1024 KB = 1 MB

就像时间的单位时分秒一样,秒进位以后就是分,分进位以后是小时。我们的内存单位也有相应进位的关系。除了 bit 到 Byte 是八进制以外,其余进制都是 2 10 = 1024 2^{10} = 1024 210=1024

常见的数值类型

数据类型 一个该类型变量占据的内存 存储方式 能表示的最大数字(量级)
int 32位二进制位(32 bit) 第一个二进制位为符号位,该位为0表示正数,为1表示负数,其余位置存储实际数字 2 31 − 1 = 2147483647 2^{31} - 1 = 2147483647 2311=2147483647
long long 64位二进制位(64bit) 同上 2 64 − 1 2^{64} - 1 2641
double 64位二进制 科学计数法存储。第一个二进制位为符号位,接下来11位存储科学计数法中10的指数部分。余下的53位存储小数部分(见下图图解) 1 0 308 10^{308} 10308

double类型的存储方式:
在这里插入图片描述

根据空间限制计算允许的数组大小

空间限制为 512 M B 512MB 512MB的时候,如果不开栈、无递归、只开一个int数组,那么这个数组可以开到多大的量级?

首先转换MB为bit:空间限制为 512 × 1024 × 1024 × 8 512\times1024\times1024\times8 512×1024×1024×8 bit

然后我们知道一个int类型占据32bit,所以允许开出的数组大小为: 512 × 1024 × 1024 × 8 32 = 128 × 1024 × 1024 ≈ 1 0 8 \frac{512\times1024\times1024\times8}{32} = 128\times1024\times1024 ≈10^{8} 32512×1024×1024×8=128×1024×1024108

练习题

空间限制为 128 M B 128MB 128MB的时候,如果不开栈、无递归、只开一个double数组,那么这个数组可以开到多大的量级?

长度为 1 0 7 10^7 107的double类型数组占多少空间?(说出数量级即可)

答案评论区见

猜你喜欢

转载自blog.csdn.net/weixin_44559752/article/details/108237422