2

我正在阅读这个问题,

但不明白 aix 回答的某些部分,即它如何只需要 17 位来存储 5 位电话号码,以及总数如何变成 2128 字节来存储 1000 个号码。

请帮我解决这个愚蠢的疑问。

提前致谢...

4

2 回答 2

4

前 5 位应存储一次,因此由于 5 位表示 0-99999 中的十进制数,因此您至少需要将其存储为二进制。

现在第一个允许您拟合 99999 个数字的二进制值是 131072,即 2^17。所以 17 位用于公共前缀。

现在您需要为每个数字的最低部分存储 1000 个 5 位数字。方法和以前一样。每个数字 17 位 = 17000 位。

Total: 17000 + 17 = 17017 bits.

每个字节有 8 位,所以

17017/8 = 2127.125.

您至少需要2128 字节

于 2012-06-24T17:20:00.957 回答
2

10 5 = 100000。ceil(log 2 (100000)) = 17。

于 2012-06-24T17:14:29.747 回答