【问题标题】:How to handle very large matrices (e.g. 1000000 by 1000000)如何处理非常大的矩阵(例如 1000000 x 1000000)
【发布时间】:2014-06-22 21:34:59
【问题描述】:

我的问题很笼统..它也不重复..

当我们声明这样的int mat[1000000][1000000];

肯定会报错说矩阵尺寸太大。

我在许多竞争性编程网站上看到了许多问题,我们需要声明一个 10^6 行、列的二维矩阵,我知道总有一些与之相关的技巧来减小矩阵大小。

所以我只想问在这种情况下我们可以使用哪些可能的方法或技巧来最小化大小..我的意思是通常需要哪些类型的算法来解决它,比如 DP 或其他任何人??

【问题讨论】:

  • 您确定这些问题必须使用数组解决吗?
  • 在“竞争性编程网站”上,这些人可能希望您找到解决问题的方法而不使用需要 4 TB 内存的数组。这就是使它具有竞争力的原因:-)

标签: c++ arrays matrix multidimensional-array


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

【讨论】:

    【解决方案2】:

    这在很大程度上取决于具体任务。没有通用的“技巧”会一直有效。您必须在特定问题中寻找能够让您以不同方式解决问题的东西。

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

    无论如何,这么大的矩阵(或任何形式的虚假表示)都不会有用。不仅因为您没有足够的内存,还因为用数据填充这样的数组需要几个小时到几个月的时间。这应该是您首先关心的问题 - 弄清楚如何用更少的数据和计算来解决任务。当你弄清楚这一点时,你也会看到什么数据结构是合适的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 2018-01-09
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 2012-09-06
      相关资源
      最近更新 更多