【问题标题】:Find an efficient algorithm for a matrix operation为矩阵运算找到一个有效的算法
【发布时间】:2012-09-11 01:42:10
【问题描述】:

这是一道面试题:

对于一个矩阵,我们定义一个操作,当我们将 1 添加到一个条目时, 所有周围的条目(上、下、左、右)也将由 1. 给定一个正矩阵,找到一个算法来判断这个矩阵是否可以用这样的操作从零矩阵构造出来。

什么是解决问题的有效算法?

我目前能想到的是使用回溯来尝试所有可能的组合,但这绝对不是有效的。这个问题有点像关灯游戏,但这里不是 0/1,这会更复杂。

谢谢。

编辑:

例如:

3 3 can be constructed from 0 0 -> 1 1 -> 2 2 -> 3 3
1 2                         0 0    1 0    1 1    1 2

【问题讨论】:

  • 如果我点击第一个或最后一个 col/row 会发生什么:包装还是切割?
  • 你的例子是不可能的:不能从零矩阵创建 1/1/1/1 ...
  • @EugenRieck 已编辑,现在这是一个可能的。尝试反向解决。
  • 似乎是一个简单的动态编程挑战。

标签: algorithm


【解决方案1】:

线性代数?

Cell i,j is touched x<sub>ij</sub> times.

n2 个变量和方程。解决。 O(n^6)高斯方法,可能还有其他更快的方法。

另外,矩阵很特殊,所以也许可以让它更快。

【讨论】:

  • 使用更多问题结构的方法是使用 2-d FFT 和卷积定理 - 您所拥有的是未知矩阵和具有 9 个 1 的模式的卷积一个正方形。获得非整数答案可能会有问题,但如果推送到了,你可以将它与分支和绑定一起使用。
【解决方案2】:

我发现了一些东西(对于 2x2 矩阵),想先分享它们
-矩阵中所有元素的总和应该能被 3 整除(然后才有可能)。
-我们有以允许的操作步骤的形式表达给定的矩阵

3 3  -> 2* 1 1    +    1* 1 1
1 2        0 1            1 0

在某些情况下无法做到这一点,例如

5 3  ->2* 1 0  +   2* 1 1     = 4 2
2 4       1 1         0 1       2 4

5 3   -   4 2     = 1 1 (this is not allowed operation)
2 4       2 4       0 0

【讨论】:

  • 错误:3x3 矩阵0 1 0 / 1 1 1 / 0 1 0 是可达的(只对中心元素执行一次操作),但所有元素的总和不能被 3 整除。
  • 另外,2x2矩阵2 4 / 4 2是可达的(触摸两个对角两次),但没有相邻的元素差≤1。
  • @jrouquie:“感谢减号”,我应该特别提到 2x2 案例。您能否提供一个 2x2 中的测试案例,其中总和不能被 3 整除,并且矩阵仍然可以减少。差值 ≤ 1" 的相邻元素是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多