这几天看《算法之美》的时候,看到有一个问题是:如何设计一个数据结构,可以在 100M 内存的限制下快速在 1000 万 个数据中查找指定数据?(每个数据占 8B)

问题不重要,里面描述的时候,有一个说明是: 1000万 个数据正好 80M 左右

然后就在想,为什么是 80M?B 是 bit 还是 byte ?怎么一下子估算的?

一时没想明白

后来仔细想了下,这个估算起来,其实有比较简便的规则的

例如,正常的字节转换单位,按照『严格』转换方式如下:

单位 (B)十万百万千万亿十亿
bytes1024102401024001024000102400001024000001024000000
KB1101001000100001000001000000
MB//0.097656250.97656259.76562597.65625976.5625
G/////0.0953674316406250.95367431640625
  • 1024B=1KB
  • 10240B=10KB
  • 102400B=100KB
  • 1048576B=1MB
  • 10485760B=10MB
  • 104857600B=100MB
  • 1073741824B=1024MB=1G

要是用人脑强行算,这可真是感觉相当恼火
但是一般来说,我们自己通过人脑算的时候,场景都在于想知道个大概容量,也就是『估算』
若只是估算,那么要求不必那么精确,比如 1024 其实可以约等于简化为 1000,然后相互以整数转化计算,这样感觉就简单多了:

  • 千字节≈1KB
  • 万字节≈10KB
  • 十万字节≈100KB
  • 百万字节≈1MB
  • 千万字节≈10MB
  • 亿字节≈100MB
  • 十亿字节≈1000MB≈1G
单位 (B)十万百万千万亿十亿
bytes十万百万千万亿十亿
KB110100十万百万
MB//0.1110100
G/////0.11

想想之前碰到 超大量 字节转化计算的时候,要么在脑袋里开始一层层计算,要么就想着用计算器 X/1024/1024 就感觉有点头疼

如今想如果用这么个 估算 方式,感觉就好办多了。

总之,对于容量转换

  • 当前级转下一级,都是十转 0.1,千转 1
  • 下下级就是:十万转 0.1、百万转 1