【问题标题】:Count no. of sub-matrices with given constraints from a matrix?数数具有来自矩阵的给定约束的子矩阵?
【发布时间】:2023-10-17 02:43:01
【问题描述】:

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

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

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

【问题讨论】:

  • 好吧,我只是要求一种用几行来解决问题的方法,人们会采取这种方法。需要任何数据结构或其他东西..

标签: c algorithm data-structures


【解决方案1】:

这是对优化方式的提示。

首先构建一个 (n,m) 矩阵,计算 (1-i, 1-j) 子矩阵中1 的数量:nm 次操作,nm 内存

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

  • 如果在同一行上,您可以使用下面的任何行来获得一个 2 个角相等的矩阵
  • 如果在同一列上,您可以使用后面的任何列来得到一个两个角相等的矩阵
  • 如果既不在同一行也不在同一列上,则只有一个矩阵,两个角相等
  • 预先计算的等价矩阵的极角元素的差是子矩阵中的个数
  • 只要一个子矩阵中包含超过 2 个子矩阵,包括它在内的所有子矩阵也将具有:您可以使用它来短路完整分析

以上只是粗略的边缘,还有一些工作来设计算法,但对于足够大的矩阵来说,它应该比蛮力好一点......

【讨论】:

    最近更新 更多