假设Eigen C++库中的SparseMatrix类型
SparseMatrix<double, RowMajor> A;
似乎缺少使用InnerIterator或double *作为返回类型的coeffFind(i,j)方法。因此,要确保A在位置(i,j)处不存在非零系数,我可以
A.coeffRef(i,j) = 0.0; // Adds an entry with zero value!
要么
if (A.coeff(i,j) != 0.0) {
A.coeffRef(i,j) = 0.0; // Double look-up cost!
}
或编写我自己的查找方法,该方法将复制本征内部使用的二进制搜索。我该怎么办?
最佳答案
如果性能很关键(足够重要),我会自己写。否则,仅基于复杂度:
因此,对于第二个选项,成本始终为O(nnz),对于第一个选项,成本始终为O(log(nnz))(如果没有元素)。如果有一个元素,则在任何情况下成本都将是O(log(nnz))的两倍,因此,相对于第二种方法中的插入,您节省的O(log(nnz))不会很重要。如果确实很关键,请自己编写。