【问题标题】:Find number of matrix groups查找矩阵组的数量
【发布时间】:2017-01-21 10:48:29
【问题描述】:

给定:

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

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

【问题讨论】:

  • 矩阵没有明显的顺序,那么“矩阵可以取的最大值”是什么意思?您是指矩阵元素绝对值的最大允许值吗?它们是什么类型的元素:正整数、整数、有理数、实数、复数、其他?您想要查找此类组的数量还是仅查找数量的代码?最重要的是,到目前为止,您在这个问题上做了哪些工作?请显示您尝试的代码——这就是本网站的全部内容。检查FAQHow to Ask

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


【解决方案1】:

这是一个典型的polya theorem 问题。你应该先从维基百科学习它和相关的概念,比如排列、循环和组。

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

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

高级解决方案需要一些技巧。您可以计算恰好具有 c_row 周期的行的排列数,其中 1

在这两种情况下,您都需要在 java 中使用 BigInteger 之类的类,因为答案会非常庞大​​。

如果我有更多时间,而你确实需要一些代码来演示,我稍后再写。

【讨论】:

  • 请不要为这个问题编写代码,它的表述很糟糕,一点也不费力。如果 OP 改进了这个问题,那么只有这样你的代码才是合适的。当 OP 根本没有指出哪种更正是合适的时,请不要编辑和“更正”问题。
  • @RoryDaulton 感谢您的建议。可以肯定的是,OP 没有以最清晰的方式提出这个问题。但是,这样的描述实际上足以理解 OP 想要问的东西,而“更正”是一个旨在由 OP 同行评审的版本提案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 2014-01-14
  • 2021-01-25
  • 1970-01-01
相关资源
最近更新 更多