Memory 您需要多少内存来存储每个可能的电话号码?

Memory 您需要多少内存来存储每个可能的电话号码?,memory,byte,storage,bits,Memory,Byte,Storage,Bits,假设我们有一个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 是这样吗?谢谢!:) 您可以将每个电话号码存储为单个整数,而无需保存

假设我们有一个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


是这样吗?谢谢!:)

您可以将每个电话号码存储为单个整数,而无需保存数字。因为您分配了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位


剩下的计算你可以自己做

如果您只需要一组电话号码,即包含或不包含每个电话号码的数据结构,那么您真正需要的是10^10位。如果第n位为1,则具有数字值n的电话号码在集合中。否则就不是了。一个完整的千兆字节超过十亿字节(约1.074 x 10^9),因此10^10位约为1.164 GB


如果您需要更多关于电话号码的信息,当然需要更多的内存。

9位?3+3+4=9?这个问题似乎离题了,因为它是一个算术练习,而不是一个关于编程的问题。它不仅仅是关于算术。排列的数量是,但如何将它们存储在最小内存量中与编程有关,而不仅仅与数学有关。@hatchet OP没有问如何将它们存储在最小内存量中,这是一个完全不同的问题。您可能会发现使用log2(99999999999)更容易然后知道每个电话号码的最大位长度为34,以及1000000000个可能的电话号码,所需的最小内存为(34*1000000000)位=42500000000字节=41503906.25 KB=~40531.16 MB=~39.58 GB。