【发布时间】:2011-12-27 04:43:51
【问题描述】:
给定一个方阵,其中每个单元格是黑色或白色。设计一个算法来找到最大的子正方形,使得所有 4 个边框都是黑色的。
我有 O(n^2) 算法:
从左到右扫描每一列,对于每一列中的每个单元格,扫描每一行以找到带有后边框的最大子正方形。
有更好的解决方案吗?
谢谢
【问题讨论】:
-
疯狂的想法:如果您的矩阵很大,也许具有良好选择的动量空间基础的离散傅里叶变换可以很好地估计结果方阵的 大小 .不过,不知道这是否实用。
-
对于每个单元格做的线性工作量对我来说听起来像 O(n^3)。
-
我们可以看看你的 0(n^2) 算法吗? :) 我在 discuss.techinterview.org/default.asp?interview.11.445656.19 看到了一个讨论,每个人都被困在 0(n^3)。
-
如果您以这种方式扫描,您实际上不必再次扫描您在之前扫描中遇到的单元格,对吗?
-
子方块的“边界”是它的外层,还是周围的层?例如,对于子方格 (5,5)-(10,10),是 (5,5) 到 (5,10) 到 (10,10) 到 (10,5) 到 (5,5) 还是(4,4) 到 (4,11) 到 (11,11) 到 (11,4) 到 (4,4) ?
标签: c++ c performance algorithm data-structures