改进 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)。
如果 a
和 i1[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;
我用 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)。
如果 a
和 i1[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;