C ++中疯狂的大型一维数组

时间:2011-05-08 14:15:09

标签: c++ arrays

如何制作具有256 ^ 256个元素的单维数组?

我研究过大整数,但我还没有发现将它们用作数组中的索引。

另一种方法是使用多维数组。无论如何,使用长64位整数作为索引,它将需要32维。有没有办法在定义后为数组添加维度?

编辑:

我想按照熵的顺序对所有256字节组合进行排序。我可以尝试一些更真实的东西,比如4字节组合。但它可能没用。谢谢你的帮助。

7 个答案:

答案 0 :(得分:14)

正如其他人所说,宇宙对于这样的阵列来说还不够大。但是,如果它是sparse array(即并非所有元素只存在一些),那么您可以使用std::map(或std::unordered_map),其中数字是关键(现在您只需要做如果找到一个大整数库。)

答案 1 :(得分:4)

具有256^256元素的任何形式的数组都会非常庞大​​,以至于存储它是不可能的。例如,如果每个元素都是1位,您仍然需要

36740182248776144775450662437685823488714166466838246415284567578424520364555850043413103562
12820063739027086844759880875030780674761777060562980339733290193252159652649992960022040932
74368143588572566368203155983301169483668442764631414483329492332706895988986119676188622814
73799459727851572551030506458030134050875026721792761435138532498848299128480137280869346120
26576704260231561001336360572266150611167852685380064696955468929349115301864049308461884866
94145775864907486950525312262263093217864817217361867923249690716116542182574428528882508424
4005613936921626330968666174894520389915236768940032

太字节存储。

也许重构你的算法会有所帮助。

答案 2 :(得分:1)

使用树并仅保留内存中您真正需要的部分。由于256 ^ 256个元素超出了您将能够存储在硬盘上的任何元素,因此您无论如何都需要减少算法。

答案 3 :(得分:1)

在我看来,你所谈论的阵列需要3 x 10 ^ 106 MB的存储空间。我认为你遇到的最严重的问题并不是索引这样一个数组。

答案 4 :(得分:0)

嗯,首先你要发明一台计算机,其内存字节数比宇宙中的原子数要多。然后,对于该计算机内存中的每个字节,然后制作与宇宙中的原子一样多的那些,并将它们全部挂钩到一个大型集群中,并且......你几乎有足够的内存。

换句话说,256 ^ 256是一个很大的数字。你不能把数组做得那么大。

答案 5 :(得分:0)

数组的索引将从0到2 ^ 2048。由于2 ^ 2048是在今天的计算机上无法表示的数字,最大可表示的数字是2 ^ 128。所以你有两个解决方案:

  • 一,等待20或30年,直到计算机能代表这个数字(而且我很乐观)。
  • 二,找到另一个代表。您的索引不能表示为数字,因此您将需要另一种表示形式:字符串,一堆整数等...使用哈希结构来存储索引< - >值对应关系。我怀疑你会完全填满你的数组,因为你永远不会有足够的内存来存储那种数组,所以哈希表会完成这项工作。

答案 6 :(得分:0)

这只能使用函数或具有成员函数的某些类来完成。数组或任何将数据存储在内存中的操作都不行。对这样的数组中的每个元素执行单个操作将花费更多时间使用当前计算机,而不是宇宙自大爆炸以来就存在。