【问题标题】:Memory required to store 1000 telephone numbers存储 1000 个电话号码所需的内存
【发布时间】:2012-06-24 17:12:56
【问题描述】:

我正在阅读this 问题,

但不理解 aix 的部分答案 如何只需要 17 位来存储 5 位电话号码,以及总计如何变成 2128 字节来存储 1000 个号码。

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

提前谢谢...

【问题讨论】:

    标签: algorithm bit


    【解决方案1】:

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

    现在第一个可以容纳 99999 个数字的二进制值是 131072,即 2^17。所以 17 位用于公共前缀。

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

    Total: 17000 + 17 = 17017 bits.

    每个字节有8位,所以

    17017/8 = 2127.125

    您至少需要 2128 字节

    【讨论】:

    • 感谢您的清晰解释,但仍有疑问。不应该是 17-1=16,因为在 99999 的上限(即(131072)上,存储数字所需的位数增加了 1 .所以,如果 131072 需要 17 位,则 (65536 - 131071) 范围内的数字应该需要 16 位。所以,它应该是 16。我错过了什么吗?
    • @abhi120 实际上,2^k 需要 k+1 位,因此 131072 需要 18 位(对于 2^02^17),数字 65536 到 131071 需要 17 位。
    • @abhi120:是的,我的意思是你需要 0-131071 的范围来存储 0-99999 中的数字。这些是 131072 个可能的数字,所以 2^17。
    • @Jack 你能帮我理解你将如何将这些最后 5 位数字存储在 17 位中并进行二进制搜索以在 java 中找到一个数字。我尝试了一整夜的理解,但没有结果。
    【解决方案2】:

    105 = 100000. ceil(log2(100000)) = 17.

    【讨论】:

    • 我认为你的答案需要一些解释......不过,对不起,不应该投反对票。
    猜你喜欢
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多