说我们有一个10位数的电话号码(xxx)xxx xxxx。如果每个数字都可以是任何数字0-9,则需要多少内存来存储每个可能的数字。
这是我的计算,但我想确保它是正确的:
有10 ^ 9种可能的组合(9位数,每种都有10个可能的值)。 每个数字可以是0 - 9,这是10个可能的值,因此每个数字必须是4位。 每个数字为4位* 9位= 36位。
(36位* 10 ^ 9组合)/(8位/字节)= 4.5 * 10 ^ 9字节/ 10 ^ 6字节/ GB = 4500 GB。
是吗?谢谢! :)
答案 0 :(得分:2)
您可以将每个电话号码存储为单个整数,而不是保存数字。因为您已分配4位来保存值0-10,所以您在浪费存储空间。另外,为什么有9位数?不应该有10?
获取尽可能大的电话号码:999 999 9999(或在您的示例中为999 999 999),然后将其转换为基数2,以确定所需的最大位数。
此转化的结果是:
999 999 999 = 111011100110101100100111111111 base 2 (length 30)
999 999 9999 = 1001010100000010111110001111111111 base 2 (length 34)
因此,所有数字都可以使用30或34位存储,而不是36位。
你可以自己做其余的计算!
答案 1 :(得分:0)
如果您只需要一组电话号码,即包含或不包含每个电话号码的数据结构,您真正需要的只是10 ^ 10位。如果第n位为1,则数字值为n的电话号码在集合中。否则就不是了。一个完整的千兆字节超过十亿字节(大约1.074 x 10 ^ 9),因此10 ^ 10位大约是1.164 GB。
如果您需要了解有关电话号码的更多信息,当然需要更多内存。