将 32 位正整数转换为空终止字符串的查找 table 需要多少 RAM

How much RAM would a lookup table for converting positive 32 bit integers to null terminated strings take

那么,如果格式:{"1","2","3"} 一直持续到 4,294,967,295,将使用多少 RAM?

不知道这是一个 'programming' 问题(也不知道为什么它的答案有用),但让我们尝试一些数学运算:

创建一个 table 字符串指针是不值得的,因为每个指针本身都是 8 个字节,最长的字符串是 10 个字节(注意,不添加 0 终止符来保存 space!),因此最好将其存储为 char[10] 数组的数组(即一个非常长的字符串,第一个数字位于偏移量 0,第二个数字位于偏移量 10,依此类推)。因此,您需要 2^31 * 10 字节 = 21,474,836,480 字节。

设 S(n) 为数字 n.

的字符串

考虑 S(429,496,730) 到 S(4,294,967,295)。通过将其划分为子范围 S(429,496,730) 到 S(999,999,999) 和 S(1,000,000,000) 到 S(4,294,967,295),我们可以看到它们需要 (999,999,999−429,496,730+1)•10 字节和 (4,294,967,295−0•0•010 字节 (4,294,967,295−0•1,01) 10 个字节用于 9 位数字加上一个空终止符,类似地 11 个字节用于 10 位数字和一个终止符。)

这是 41,949,672,956 字节。

考虑如何查找 1 到 4,294,967,295 范围内的任意数字 n。如果它在 429,496,730 到 999,999,999 范围内,则它的字符串从 (n−429,496,730)*10 个字节开始进入上面第一个子范围的 table。如果高于该值,则其字符串从 (n-1,000,000,000)•11 个字节开始进入第二个子范围。

如果小于429,496,730,我们只加1,000,000,000,然后查找S(n+1,000,000,000)。 S(n) 的字符串从 S(n+1,000,000,000).[=10 的第一个字节后的第一个非零数字开始=]

因此我们已经证明我们最多需要 41,949,672,956 字节来实现一个合理的查找函数,该函数可以轻松地 return 指向从 1 到 4,294,967,295 的任何整数的以空结尾的字符串的指针。

此外,很容易看出两个子范围的组合 table 中没有字符串是任何其他字符串的子字符串,这意味着每个字符串都是必需的。因此,41,949,672,956 字节对于 return 指向准备好的字符串的指针的函数来说是必要且足够的。