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

在做题过程中会遇到一些空间限制,如下图的“内存限制”为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
KB1024个字节千字节1024 Byte = 1 KB
MB比KB高一级的单位兆字节1024 KB = 1 MB

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

常见的数值类型

数据类型一个该类型变量占据的内存存储方式能表示的最大数字(量级)
int32位二进制位(32 bit)第一个二进制位为符号位,该位为0表示正数,为1表示负数,其余位置存储实际数字 2 31 − 1 = 2147483647 2^{31} - 1 = 2147483647 2311=2147483647
long long64位二进制位(64bit)同上 2 64 − 1 2^{64} - 1 2641
double64位二进制科学计数法存储。第一个二进制位为符号位,接下来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类型数组占多少空间?(说出数量级即可)

答案评论区见

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值