Matrix 用小O(空间)计算大矩阵的N次方

Matrix 用小O(空间)计算大矩阵的N次方,matrix,computer-science,multiplication,Matrix,Computer Science,Multiplication,给定一个中型/大型矩阵[i][j](例如50k*50k个元素),它表示一个带有加权边i->j的图的邻接矩阵,它很可能没有镜像,因此每个元素都计数。我想计算它的n次方,得到它的图行走(是的,一旦元素太大,我会对它们进行模化),然后我想对结果的列求和 然而,即使我只处理M^1和M^I矩阵(这可能太慢了,无法进行N次乘法),50k^2本身也是一个很大的内存,这是内存的两倍 是否有一种算法可以获得不需要加载整个矩阵的矩阵的n次幂的列之和?(类似于逐行乘法,尽管我不知道如何得到一个元素,因为需要整行整列,

给定一个中型/大型矩阵[i][j](例如50k*50k个元素),它表示一个带有加权边i->j的图的邻接矩阵,它很可能没有镜像,因此每个元素都计数。我想计算它的n次方,得到它的图行走(是的,一旦元素太大,我会对它们进行模化),然后我想对结果的列求和

然而,即使我只处理M^1和M^I矩阵(这可能太慢了,无法进行N次乘法),50k^2本身也是一个很大的内存,这是内存的两倍


是否有一种算法可以获得不需要加载整个矩阵的矩阵的n次幂的列之和?(类似于逐行乘法,尽管我不知道如何得到一个元素,因为需要整行整列,所以我需要加载整个矩阵)。最好不要每次乘法都从磁盘上保存和加载。

内存不是50k^2,而是2500k^2=2.5G。每一个2.5g的项目都需要50k的乘法,所以只有一个完整的产品是不可行的,除非你有一台超级计算机。对于M^2,您当然可以在不进行完全计算的情况下获得行或列,但不能很好地推广到更高的幂。图的邻接矩阵方法不能很好地伸缩。不管你想做什么,把它更直接地看作是一个图论问题。从节点执行BFS之类的操作,而不是矩阵幂计算。因此,如果您将其迁移到Math Overflow,您可能会得到更好的答案,因为它实际上更像是一个数学问题,而不是一个编程问题。不过,我想对其进行编程,我不理解他们(数学家)有趣的符号。我确实想获得行走,这意味着我必须乘以邻接矩阵,有没有其他方法可以获得图的k长度加权行走?你是想找到所有这样的行走,还是最短的行走?BFS的一些变化似乎是可行的:。如果你真的想要所有的行走,你需要显式或隐式地计算功率。你至少可以通过平方来使用指数运算,这会有所帮助。我想对最终结果矩阵的列求和,这样我可以减少问题,以获得结果矩阵的单个列“I”的和,并对每列执行50k次,假设可以在不求解整个矩阵的情况下获得。我不觉得做BFS会有帮助,因为它会很快爆炸,但我会看一下。内存不会是50k^2,而是2500K^2=2.5G。每一个2.5g的项目都需要50k的乘法,所以只有一个完整的产品是不可行的,除非你有一台超级计算机。对于M^2,您当然可以在不进行完全计算的情况下获得行或列,但不能很好地推广到更高的幂。图的邻接矩阵方法不能很好地伸缩。不管你想做什么,把它更直接地看作是一个图论问题。从节点执行BFS之类的操作,而不是矩阵幂计算。因此,如果您将其迁移到Math Overflow,您可能会得到更好的答案,因为它实际上更像是一个数学问题,而不是一个编程问题。不过,我想对其进行编程,我不理解他们(数学家)有趣的符号。我确实想获得行走,这意味着我必须乘以邻接矩阵,有没有其他方法可以获得图的k长度加权行走?你是想找到所有这样的行走,还是最短的行走?BFS的一些变化似乎是可行的:。如果你真的想要所有的行走,你需要显式或隐式地计算功率。你至少可以通过平方来使用指数运算,这会有所帮助。我想对最终结果矩阵的列求和,这样我可以减少问题,以获得结果矩阵的单个列“I”的和,并对每列执行50k次,假设可以在不求解整个矩阵的情况下获得。我不觉得做BFS会有帮助,因为这会很快爆发,但我会看看。