MATLAB 操作 A*B 的运行时复杂度是多少,其中 A 和 B 是一般稀疏矩阵?

计算科学 matlab 稀疏矩阵
2021-11-28 01:12:26

我试图搜索答案,发现本书中的 cs_multiply 方法已被用于在 MATLAB 中将两个通用稀疏矩阵相乘。

在书中它说“这种方法所花费的时间(A * B)O(n + f +|B|),其中f执行的浮点运算的数量在哪里(f支配运行时间,除非A有一个或多个没有条目的列,在这种情况下,要么n|B|可以大于 f )"

那么这|B|代表什么?Big-O 表示法的运行时复杂度应该是多少?

任何帮助将不胜感激。在此先感谢

1个回答

作为一般规则,到目前为止,将两个稀疏矩阵相乘的主要方面实际上并不是任何浮点计算,而是形成和分配所得稀疏矩阵的稀疏模式。如果A,B是两个稀疏矩阵,那么AB通常也是稀疏的,但远不如此 - 每行将有更多条目,并且在确定这些条目和分配结果内存方面涉及大量工作。这将比实际乘以相应的元素花费更长的时间,除非A,B已经很稠密了。

第二条规则是不要在两个稀疏矩阵之间形成乘积,除非你无能为力。例如,如果X=AB你以后需要X形成这种产品b=Xa在哪里a,b是向量,那么你几乎总是会通过计算变得更好b作为b=A(Ba),即通过使用两个矩阵向量乘积而不是一个矩阵向量乘积与乘积矩阵X.