【发布时间】:2012-06-24 17:12:56
【问题描述】:
我正在阅读this 问题,
但不理解 aix 的部分答案 如何只需要 17 位来存储 5 位电话号码,以及总计如何变成 2128 字节来存储 1000 个号码。
请帮我解决这个愚蠢的疑问。
提前谢谢...
【问题讨论】:
我正在阅读this 问题,
但不理解 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 字节。
【讨论】:
2^k 需要 k+1 位,因此 131072 需要 18 位(对于 2^0 到 2^17),数字 65536 到 131071 需要 17 位。
105 = 100000. ceil(log2(100000)) = 17.
【讨论】: