我正在阅读这个问题,
但不明白 aix 回答的某些部分,即它如何只需要 17 位来存储 5 位电话号码,以及总数如何变成 2128 字节来存储 1000 个号码。
请帮我解决这个愚蠢的疑问。
提前致谢...
前 5 位应存储一次,因此由于 5 位表示 0-99999 中的十进制数,因此您至少需要将其存储为二进制。
现在第一个允许您拟合 99999 个数字的二进制值是 131072,即 2^17。所以 17 位用于公共前缀。
现在您需要为每个数字的最低部分存储 1000 个 5 位数字。方法和以前一样。每个数字 17 位 = 17000 位。
Total: 17000 + 17 = 17017 bits
.
每个字节有 8 位,所以
17017/8 = 2127.125
.
您至少需要2128 字节。
10 5 = 100000。ceil(log 2 (100000)) = 17。