查找CRS稀疏矩阵中的值?

时间:2013-03-18 22:17:19

标签: c++ sparse-matrix

我是稀疏矩阵的新手,但现在需要在我的工作中利用一个来节省空间。我理解以下矩阵:

10   0    0    0   -2    0
3    9    0    0    0    3
0    7    8    7    0    0
3    0    8    7    5    0
0    8    0    9    9    13
0    4    0    0    2   -1

可以用这样的三个向量表示:

[10 -2 3 9 3 7 8 7 3 8 7 5 8 9 9 13 3 2 -1] // nonzero_vals

[1 5 1 2 6 2 3 4 1 3 4 5 2 4 5 6 2 5 6] // col_indices

[1 3 6 9 13 17 20] // row_ptr (indices of values that start row)

现在我的问题是在O(1)时间内确定值查找的正确方程。例如,如果我想要返回位置(2,2)处存储的矩阵值,我该如何返回9?另外,如果在稀疏矩阵中没有表示查找坐标,如何在O(1)时间内返回0?

感谢您提供的任何帮助。我确信有完善的方程式,但我无法找到它们。

1 个答案:

答案 0 :(得分:2)

没有用于获取任意(i,j)坐标值的 O(1)过程(至少没有预处理)。您可以做的最好的事情是 O(log N)平均(矩阵 MxN ),通过列索引上的二进制搜索过程。 * < / SUP>

<小时/> <子> *嗯,实际上它是 O(log k),其中 k 是行中非零的数量。但是,如果假设密度与矩阵大小无关(通常是这种情况),那么 O(log N)是有效的。