我正在尝试提出快速算法来查找操作结果,其中
- L - 是实数对称
n x n
矩阵。 - A - 是稀疏
n x m
矩阵,m < n
。每行有一个且只有一个非零元素,它等于1。还保证每一列最多有两个非零元素。
我想出了一种算法,但我觉得应该有比这更快的算法。
让我们将 A 的每一列表示为具有非零元素的行号对。如果一列只有一个非零元素,则其行号列出两次。例如对于以下矩阵
这种表示将是
column 0: [0, 2]; column 1: [1, 3]; column 2: [4, 4]
或者我们可以将其列为单个数组:A = [0, 2, 1, 3, 4, 4];
现在,可以计算为:
for (i = 0; i < A.length; i += 2):
if A[i] != A[i + 1]:
# sum of two column vectors, i/2-th column of L'
L'[i/2] = L[A[i]] + L[A[i + 1]]
else:
L'[i/2] = L[A[i]]
为了计算,我们再做一次:
for (i = 0; i < A.length; i += 2):
if A[i] != A[i + 1]:
# sum of two row vectors, i/2-th row of L''
L''[i/2] = L'[A[i]] + L'[A[i + 1]]
else:
L''[i/2] = L'[A[i]]
这种方法的时间复杂度是 O(m n + m n),空间复杂度(得到最终结果)是 O(n n)。我想知道是否有可能在空间和/或性能方面将其提高到 O(m m)?