C ++:如何实现具有非常大索引的稀疏矩阵?

时间:2017-12-08 22:48:14

标签: c++ arrays matrix sparse-matrix eigen

我正在尝试实现this article中提出的动态编程来解决最短哈密顿路径问题。此解决方案要求将值存储在名为DP的大小为n x 2^n的二维数组中,其中n是图的节点数。

我的图表有超过100个节点,但它非常稀疏,所以矩阵DP的大多数元素都是+无穷大。因此,我可以使用稀疏矩阵库存储它(并将零元素视为+无穷大)。例如,使用Eigen:

Eigen::SparseMatrix<double> M(n, 1 << n);
M.reserve(5e8); // reserve 4GB of RAM since I'm not able to estimate the number of non-zeros

但是,此矩阵的最大索引为2^n - 1(在C ++代码2^n中为1 << n),远远大于索引允许的范围(如果{{1} }} 例如)。对于非常大的n = 100,操作1 << n也不再有效(我尝试了n并且在n = 114时获得了262144。

所以,虽然我的矩阵的非无限元素的数量可以适合内存,但我不知道如何处理索引。

如果有人能帮我解决这个问题,我会非常感激。非常感谢你!

0 个答案:

没有答案