检测何时可以进行矩阵乘法

时间:2012-02-13 22:01:48

标签: algorithm math language-agnostic matrix

这是我在编程竞赛中遇到的一个有趣的问题:

问题陈述:给定n矩阵的维度,确定是否存在可以乘以矩阵的排序。如果存在,则打印出所得矩阵的大小(维度的乘积)。

我的观察结果:如果将每个矩阵视为一个顶点并在可以乘法的矩阵之间绘制有向边,则会减少到NP完全哈密顿路径问题。我通过简单的强制解决问题解决了这个问题,但这显然非常缓慢。我想知道这个特定的问题实例是否有任何聪明的优化。

2 个答案:

答案 0 :(得分:14)

  1. 为每个维度长度创建一个节点。也就是说,如果有一个维度矩阵(m,n),那么m和n将是图中的顶点。

  2. 对于每个大小(m,n)的矩阵,将节点m和n连接到有向边(两个节点之间可以有多个边)。

  3. 现在找到一个eularian路径会给出乘法顺序。

  4. 请参阅http://en.wikipedia.org/wiki/Euler_path查找Eularian小径。复杂度非常接近线性(O(nlog ^ 3n loglogn),其中n是边数=矩阵数)。

答案 1 :(得分:0)

创建一个兼容性矩阵(让我们称之为CM),如果矩阵x可以多次乘以y,则为CM [x,y] = 1,否则为0。 如果行列式(CM)<> 0有订单。

这只是一种直觉,如果我错了,我道歉(遗憾的是我找不到可靠的证据)。