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

Improving code in c (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;
}

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

作为b = a + const,您可以简单地使用diag[i1[c][0] + const] += i1[c][2]并将复杂度从O(N2)降低到O(N)。

如果 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;