在CRS稀疏矩阵中查找值

Looking up values in a CRS sparse matrix?

本文关键字:查找 CRS      更新时间:2023-10-16

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

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?另外,如果查找坐标没有在稀疏矩阵中表示,我如何返回0,也是在O(1)时间内?

我很感激你能提供的任何帮助。我相信有很好的公式,但我找不到它们。

没有 0 (1)过程来获取任意(i,j)坐标处的值(至少没有预处理)。你能做的最好的是平均O(log N)(其中矩阵是MxN),通过对列索引进行二进制搜索。*


子> <实际上是>O(log k),其中k是行中非零的个数。然而,如果假设密度与矩阵大小无关(通常是这种情况),则O(log N)是有效的。