【发布时间】:2014-10-19 17:59:25
【问题描述】:
给出了三个 N*N 矩阵 A,B,C。 C 与 A 和 B 的乘积相同,只是只有一个元素是错误的。找到它的简单算法需要 N^3 时间。我们可以做得比这更快吗?
【问题讨论】:
标签: algorithm matrix matrix-multiplication
给出了三个 N*N 矩阵 A,B,C。 C 与 A 和 B 的乘积相同,只是只有一个元素是错误的。找到它的简单算法需要 N^3 时间。我们可以做得比这更快吗?
【问题讨论】:
标签: algorithm matrix matrix-multiplication
取一个向量v = (1 1 1 1 ... 1)<sup>T</sup>,并计算:u = Cv - A(Bv)。
u 等于 (C-AB)v,因此它在除 1 之外的所有元素中都为零。此元素的索引对应于 C 与 AB 不同的行索引。元素(a)的值是C-AB中非零元素的值。
要查找列索引,您可以使用向量v<sub>2</sub> = (1 2 3 4 ... n)<sup>T</sup> 重复此操作。现在非零元素的值为ac,其中a是我们之前计算的值,c是列索引。
由于我们只进行了几次矩阵*向量乘法,因此运行时间为 O(n^2)。
【讨论】: