这几天看《算法之美》的时候,看到有一个问题是:如何设计一个数据结构,可以在 100M 内存的限制下快速在 1000 万 个数据中查找指定数据?(每个数据占 8B)
问题不重要,里面描述的时候,有一个说明是: 1000万
个数据正好 80M
左右
然后就在想,为什么是 80M?B 是 bit 还是 byte ?怎么一下子估算的?
一时没想明白
后来仔细想了下,这个估算起来,其实有比较简便的规则的
例如,正常的字节转换单位,按照『严格』转换方式如下:
单位 (B) | 千 | 万 | 十万 | 百万 | 千万 | 亿 | 十亿 |
---|---|---|---|---|---|---|---|
bytes | 1024 | 10240 | 102400 | 1024000 | 10240000 | 102400000 | 1024000000 |
KB | 1 | 10 | 100 | 1000 | 10000 | 100000 | 1000000 |
MB | / | / | 0.09765625 | 0.9765625 | 9.765625 | 97.65625 | 976.5625 |
G | / | / | / | / | / | 0.095367431640625 | 0.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 | 千 | 万 | 十万 | 百万 | 千万 | 亿 | 十亿 |
KB | 1 | 10 | 100 | 千 | 万 | 十万 | 百万 |
MB | / | / | 0.1 | 1 | 10 | 100 | 千 |
G | / | / | / | / | / | 0.1 | 1 |
想想之前碰到 超大量
字节转化计算的时候,要么在脑袋里开始一层层计算,要么就想着用计算器 X/1024/1024
就感觉有点头疼
如今想如果用这么个 估算
方式,感觉就好办多了。
总之,对于容量转换
- 当前级转下一级,都是十转 0.1,千转 1
- 下下级就是:十万转 0.1、百万转 1