如何查找不同的子矩阵的数量?

时间:2014-07-10 12:50:29

标签: c++ algorithm matrix

我正在尝试从spoj中解决问题DSUBMTR,它要求计算给定矩阵的不同子矩阵。我尝试使用哈希表(STL MAP),但方法是O(N 2 M 2 lg(NM))因此超时。请注意,给定矩阵仅包含字母表。

我想提供一些提示/指示如何解决这些问题。

1 个答案:

答案 0 :(得分:0)

它真的是一种非常好的思想食物。我在脑海中的想法是使用子矩阵的ASCII值'字母表并以这样的方式排列它们的值,即只能为该特定子矩阵生成唯一值。例如,如果矩阵是[(A,B,C);(A,A,A)],那么对于子矩阵[(A,B);(A,A)],你可以使用{{ 1}}作为此特定ASCII(A)*1000000000+ASCII(B)*1000000+ASCII(A)*1000+ASCII(A)子矩阵的唯一值(虽然这不是一个合适的公式,但我希望您能想到更合适的数学方法)。所以,现在你可以将它们哈希到哈希表中。对所有子矩阵应用此公式,并查看哈希表上的冲突,忽略重复的冲突。然后计算哈希表中填充位置的数量。