algorithm - 分割矩阵

标签 algorithm

给定一个 N x N矩阵,其中 N <= 25 , 并且每个单元格都有一个正整数值,你怎么能用最多 K 行(用直线上/下直线或直线左/右直线 [注意:它们必须从一侧延伸到另一侧])来划分它,以便最大值组(由分区确定)是最小值?

例如,给定以下矩阵

1 1 2
1 1 2 
2 2 4

我们可以使用 2 条线来划分它,我们应该在第 2 列和第 3 列之间画一条线,以及在第 2 行和第 3 行之间画一条线,这给出了最小化的最大值 4。

我的第一个想法是一个代表每行状态的位掩码,用 2 个整数来代表它。然而,这太慢了。我认为复杂度是 O(2^(2N))也许您可以解决行问题,然后解决列问题?

有人有什么想法吗?

编辑:这是我用谷歌搜索后的问题:http://www.sciencedirect.com/science/article/pii/0166218X94001546

另一篇论文:http://cis.poly.edu/suel/papers/pxp.pdf

我正在努力阅读它^

最佳答案

可以对垂直线尝试所有子集,然后对水平线做动态规划。

假设您已将垂直线集固定为 S。将由矩阵的前 K 行和固定垂直线集 S 组成的子问题的答案表示为 D(K, S)。然后找到一个递归来解决具有更小规模的子问题的 D(K, S) 是微不足道的。

如果您在开始时预先计算每个子矩阵的大小,则总体复杂度应为 O(2^N * N^2)。

关于algorithm - 分割矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14784113/

相关文章:

algorithm - 过滤集合上的范围查询

下降网格项目的算法

algorithm - 迭代算法打印幂集的解释

java - 为可索引并发跳过列表实现交换方法

algorithm - 遍历连接的组件

c++ - 普里姆算法C++

ruby - 如何 "split and group"基于对象的一个​​属性的数组

在允许的重量范围内配对 2 个对象的算法?

algorithm - "insertions"对数组排序的最小个数

arrays - 计算不适合 RAM 的数组中重复元素的有效算法