C++ 在CRS稀疏矩阵中查找值?

C++ 在CRS稀疏矩阵中查找值?,c++,sparse-matrix,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

我不熟悉使用稀疏矩阵,但现在需要在工作中使用稀疏矩阵来节省空间。我了解以下矩阵:

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

我感谢你能提供的任何帮助。我确信有很好的方程,但我找不到它们。

没有O(1)程序可以获得任意(I,j)坐标的值(至少不需要预处理)。通过对列索引的二进制搜索过程,您可以做的最好的事情是平均O(logn)(其中矩阵是MxN)*


*实际上是O(logk),其中k是行中非零的数目。然而,如果假设密度与矩阵大小无关(通常是这样),那么O(logn)是有效的。

那么,进行查找的正确(最快)过程是什么?(对于CSR矩阵)@user1764386:您可以在固定时间内获得相关的row_ptr值。然后使用它们在col_索引数组上绑定二进制搜索。