生成稀疏矩阵的复杂性

时间:2015-06-16 16:25:50

标签: r matlab matrix sparse-matrix

我有一个对称矩阵S(n * n),其中大约70%的数据是0。

对称矩阵

enter image description here

我想将对称矩阵转换为具有t行的稀疏矩阵。

从原始对称矩阵生成稀疏矩阵的时间复杂度是多少?

是O(n ^ 2),因为我必须遍历每一行/列交叉点并获得不是0的元素?

由于我正在处理对称矩阵,我可以说我的时间复杂度可以降低到O((n *(n + 1))/ 2),因为在对称矩阵中a [i] [j] = a [j]的[I]?在这种情况下,如果我遇到[i] [j]为0,我可以说[j] [i] = 0.这可能会使我的循环减少大约一半。

1 个答案:

答案 0 :(得分:4)

当从对称矩阵的完整表示转换为稀疏表示时,您将需要扫描主对角线上方的所有元素(或在主对角线和下方对称)。对于(n×n)矩阵矩阵,这是需要扫描的(n ^ 2 + n)/ 2个条目。因此,您需要执行O(n ^ 2)工作,以确定需要输入稀疏矩阵的内容。

构造稀疏矩阵时,需要将原始矩阵中的所有非空条目存储到稀疏矩阵中。对于0矩阵,这不需要额外的工作,对于完全密集的矩阵,这需要(n ^ 2 + n)/ 2个插入操作。

因此,从对称矩阵转换为稀疏表示将始终需要O(n ^ 2)时间 - 事实上它需要Theta(n ^ 2)时间。