如何在C++中创建20000*20000矩阵

Jac*_*kie 2 c++ matrix

我尝试用20000点计算一个问题,所以有一个20000*20000个元素的距离矩阵,如何在C++中存储这个矩阵?我在具有4 GB RAM的计算机上使用Visual Studio 2008.任何建议将不胜感激.

bri*_*gge 11

稀疏矩阵可能是您要寻找的.许多问题在矩阵的每个单元格中都没有值. SparseLib ++是一个允许有效矩阵运算的库.


Bob*_*man 8

避免使用您正在考虑的强力方法,并尝试设想一个涉及填充单个20000元素列表的解决方案,而不是涵盖所有可能排列的数组.

对于初学者,考虑到您的问题的具体情况,请考虑以下简单的方法,您可以改进这些方法:

int bestResult = -1;  // some invalid value
int bestInner;
int bestOuter;

for ( int outer = 0; outer < MAX; outer++ )
{
    for ( int inner = 0; inner < MAX; inner++ )
    {
        int candidateResult = SomeFunction( list[ inner ], list[ outer ] );

        if ( candidateResult > bestResult )
        {
            bestResult = candidateResult;
            bestInner = inner;
            bestOuter = outer;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Pas*_*uoq 6

可以将矩阵表示为单个大型数组.这样做是否是个好主意是由你决定的.

如果每个单元需要四个字节,则矩阵仅为4*20000*20000,即1.6GB.任何平台都应该为单个进程提供大量内存.Windows默认为32位进程提供2GiB - 如果需要更多,您可以使用链接器选项.我试过的所有32位unices都给你超过2.5GiB.

  • 1.6 GB不是连续的.它对你的过程来说似乎是连续的,但没有什么可以阻止窗口在物理内存中分配那些内存页面.这就是为什么我们将虚拟内存指令硬编码到我们的处理器中. (2认同)

Fra*_*ack 5

你需要内存中的矩阵吗?

根据您需要执行的计算的复杂性,您可以简单地使用计算距离的函数.如果您只使用其中一些距离值,这甚至可能比预先计算单个距离值更快.