查找矩阵组的数量

时间:2017-01-21 10:48:29

标签: algorithm math matrix matrix-multiplication discrete-mathematics

假设:

  • 行数
  • 列数
  • 最大值矩阵可以

如果可以通过交换行和列从另一个矩阵中获得一个矩阵,则认为两个矩阵是等价的。等价的矩阵可以组合在一起。如何找到这样的群体数量?

1 个答案:

答案 0 :(得分:1)

这是典型的polya theorem问题。你应该首先从维基百科中学习它和相关的概念,比如排列,周期和小组。

说行数是N,列数是M,矩阵可以取的最大值是V.有(N + M)!组中的排列和我们可以使用的V颜色。

简单的解决方案是枚举所有可能的行排列和列的排列。然后c(g)可以通过c(行的排列)* c(列的排列)来计算。这是一个O((N + M)!)算法。

高级解决方案需要一些技巧。您可以计算具有正确c_row周期的行的排列数,其中1 <= c_row <= N,列类似。然后,您可以枚举所有(c_row,c_column)对,并汇总结果。这将是具有适当实现的O(N ^ 2 + M ^ 2 + NM)算法。

在这两种情况下,你需要在java中使用像BigInteger这样的类,因为答案非常大。

如果我有更多时间,你确实需要一些代码进行演示,我稍后会写一个。