算不了。具有矩阵给定约束的子矩阵?

时间:2016-10-03 11:21:55

标签: c algorithm data-structures

这是一次求职面试中提出的问题。我想知道获得所需结果的最佳最佳算法。 问题是:假设你有一个(n×m)矩阵,其中包含一些数字。 现在你必须计算大小> =(2 x 2)的矩阵的数量,它将具有以下两个条件:

  • 它应该至少有两个1;
  • 矩阵的两个角元素是相等的。

我知道采用矩阵2 x 2和更大的所有元素的强力算法;然后计算一下。 1的,并检查角元素的6个可能条件,其中任何两个是相等的。 我想知道处理这些问题或任何来源的方式,因为我在“GeeksForGeeks” StackOverFlow 本身找不到任何东西,以最优化的方式。

1 个答案:

答案 0 :(得分:3)

这是对优化方式的暗示。

首先构建一个(n,m)矩阵,计算(1-i,1-j)子矩阵中1的数量:n m次运算,n m memory < / p>

现在对于矩阵的每个元素,搜索下面等于

的所有元素
  • 如果在同一行,您可以使用下面的任何一行来生成一个等于2个角的矩阵
  • 如果在同一列上,您可以使用之后的任何列,使其具有2个角等于
  • 的矩阵
  • 如果在同一行或同一列上都没有一个矩阵,其中两个角等于
  • 预先计算的等效矩阵的等边矩阵的极角元素的差异是子矩阵中的1的数量
  • 只要一个子矩阵中有超过2个子矩阵,包含它的所有子矩阵也将具有:您可以使用它来短路完整分析

以上只是粗糙的边缘,仍然有一些工作来设计一个algorythm,但对于足够大的矩阵,它应该比蛮力好一点......