如何处理非常大的矩阵(例如1000000乘1000000)

时间:2014-05-06 10:14:48

标签: c++ arrays matrix multidimensional-array

我的问题非常笼统......而且它也不重复......

当我们宣布像int mat[1000000][1000000];

这样的内容时

确定它会出现错误,表明矩阵太大。

我在许多竞争性编程网站上看到很多问题,我们需要声明一个10 ^ 6行,列的2d矩阵,我知道总有一些技巧可以减少矩阵大小。

所以我只想问一下,在这种情况下我们可以使用哪些方法或技巧来减小尺寸.i意味着通常需要哪种类型的算法来解决它,如DP或其他任何人?

2 个答案:

答案 0 :(得分:3)

  1. 在DP中,如果当前行仅依赖于前一行,则可以使用 int mat[2][1000000];。计算当前行后,您可以立即丢弃上一行并切换当前行和之前的行。
  2. 有时,可以使用std::map代替2D数组。
  3. 我在编程竞赛中遇到了很多问题 解决方案根据具体情况而定,所以如果你提到一个 具体案例,我可以为您提供更好的针对性解决方案。

答案 1 :(得分:3)

这在很大程度上取决于具体的任务。没有普遍的"技巧"这将永远有效。您必须在特定问题中寻找能够以不同方式解决问题的内容。

那就是说,如果我真的看不到其他方式,我开始考虑该矩阵中有多少元素真的是非零的(也许我可以使用稀疏数组或地图(字典)代替)。或者我可能不需要存储所有内存元素,但可以在每次需要时重新计算它们。

无论如何,大型(或任何类型的伪造表示)的矩阵都不会有用。不仅仅是因为你没有足够的内存,而且因为用数据填充这样一个数组需要花费几个小时到几个月的时间。这应该是您首先关注的问题 - 找出如何使用更少的数据和计算来解决任务。当你弄清楚这一点时,你也会看到适当的数据结构。