改进c中的代码(稀疏矩阵表示)

时间:2016-10-27 21:00:30

标签: c matrix sparse-matrix representation

我用C编写的这段代码需要很长时间才能运行。有没有办法改善它? 我想要做的是将每行的值相加并将值保存在向量中。在此代码中,i1是包含矩阵的行位置,列和关联值的值。 i1没有排序。

while(a < 2*var)
{
    for (int c=0; c < 2*var; c++)
    {
        if (i1[c][0] == a)
        {
            diag[b] += i1[c][2];
        }
    }
    a = a+1;
    b = b+1;
}

任何想法或建议都将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

作为BaseModelT2,您可以简单地使用b = a + const并将复杂度从O(N 2 )降低到O(N)。

答案 1 :(得分:0)

如果ai1[c][0]是整数类型,您可以将嵌套循环更改为单个循环:

for (int c = 0; c < 2 * var; c++) {
    if (i1[c][0] >= a && i1[c][0] < 2 * var) {
        diag[b + (i1[c][0] - a)] += i1[c][2];
    }
}
b += 2 * var - a;
a = 2 * var;