我的问题非常笼统......而且它也不重复......
当我们宣布像int mat[1000000][1000000];
确定它会出现错误,表明矩阵太大。
我在许多竞争性编程网站上看到很多问题,我们需要声明一个10 ^ 6行,列的2d矩阵,我知道总有一些技巧可以减少矩阵大小。
所以我只想问一下,在这种情况下我们可以使用哪些方法或技巧来减小尺寸.i意味着通常需要哪种类型的算法来解决它,如DP或其他任何人?
答案 0 :(得分:3)
int mat[2][1000000];
。计算当前行后,您可以立即丢弃上一行并切换当前行和之前的行。std::map
代替2D数组。答案 1 :(得分:3)
这在很大程度上取决于具体的任务。没有普遍的"技巧"这将永远有效。您必须在特定问题中寻找能够以不同方式解决问题的内容。
那就是说,如果我真的看不到其他方式,我开始考虑该矩阵中有多少元素真的是非零的(也许我可以使用稀疏数组或地图(字典)代替)。或者我可能不需要存储所有内存元素,但可以在每次需要时重新计算它们。
无论如何,大型(或任何类型的伪造表示)的矩阵都不会有用。不仅仅是因为你没有足够的内存,而且因为用数据填充这样一个数组需要花费几个小时到几个月的时间。这应该是您首先关注的问题 - 找出如何使用更少的数据和计算来解决任务。当你弄清楚这一点时,你也会看到适当的数据结构。