【问题标题】:Looking up values in a CRS sparse matrix?在 CRS 稀疏矩阵中查找值?
【发布时间】:2013-03-18 22:17:19
【问题描述】:

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

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) 时间内?

感谢您提供的任何帮助。我敢肯定这方面有完善的方程式,但我找不到它们。

【问题讨论】:

    标签: c++ sparse-matrix


    【解决方案1】:

    没有O(1) 过程来获取任意(i,j) 坐标处的值(至少在没有预处理的情况下是这样)。您可以做的最好的事情是平均O(log N)(矩阵为MxN),通过列索引上的二进制搜索过程。*


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

    【讨论】:

    • 那么进行查找的正确(最快)过程是什么? (对于企业社会责任矩阵)
    • @user1764386:嗯,你可以在常数时间内得到相关的row_ptr值。然后,您可以使用它们在 col_indices 数组上绑定二进制搜索。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多