快速计算以下产品的方法

时间:2014-09-18 13:41:41

标签: performance algorithm optimization matrix time-complexity

给出

1)1xn向量a

2)nx1向量b

3)nxn矩阵X

问题是获得可以计算产品的迭代方法

a*{X*{X*{X*X}*X}*X}*b

尽可能快,其中括号{Y}是一个用户定义的运算符,它返回一个矩阵,其所有对角元素都为零,其非对角元素等于矩阵Y的元素


注意:

如果没有括号{}运算符,如果想要计算乘积a*X*X*X*X*X*X*b,我认为我们可以自然地将矩阵乘法运算符*关联如下:

(((a*X)*X)*X)*(X*(X*(X*b)))

因此总时间复杂度为O(n^2)。但是,当谈到

的计算时

a*{X*{X*{X*X}*X}*X}*b

我不知道如何更改*的关联类型。如果有人能给我一些提示,以显示在a*{X*{X*{X*X}*X}*X}*b而不是O(n^2)的同一时间内迭代计算O(n^3)的可能性,我将不胜感激。

1 个答案:

答案 0 :(得分:3)

我怀疑今天我们将通过以下减少提出o(matrix-multiplication(n)) - 时间算法。但是,可以将空间使用量设置为线性。

{Y} = Y - diag(Y)。我将考虑更简单的计算a*{X*{X*X}*X}*b'问题。使用diag的线性,我们写

{X*{X*X}*X} = {X*(X*X - diag(X*X))*X}
            = X*(X*X - diag(X*X))*X - diag(X*(X*X - diag(X*X))*X)
            = X*X*X*X - X*diag(X*X)*X - diag(X*X*X*X - X*diag(X*X)*X)
            = X*X*X*X - X*diag(X*X)*X - diag(X*X*X*X) + diag(X*diag(X*X)*X).

现在依次考虑每个术语。第一项a*X*X*X*X*b' = ((a*X)*X)*(X*(X*b'))可通过O(n^2)运算来计算。第二个术语a*X*diag(X*X)*X*b' = (a*X)*diag(X*X)*(X*b')也是如此。第四个术语也是a*diag(X*diag(X*X)*X)*b'

有问题的术语是第三个,a*diag(X*X*X*X)*b'。由于其他三个可以使用O(n^2)运算来计算,因此它在某种意义上与整个计算相同。

j成为全1矢量。然后是j*diag(X*X*X*X)*j' = tr(X^4)。如果X是图的邻接矩阵,则tr(X^4)是(可能是简并的)4个循环的数量。假设无向简单图,简并4周期的数量由度序列的简单函数给出。 state of the art in cycle counting似乎并不比矩阵乘法更好。