繁体   English   中英

矩阵中的最小分割数

[英]Minimum number of splits in Matrix

有一个矩形板,其中包含宽x高的正方形瓷砖。 通过从水平或垂直边缘分开,可以将图纸分为两个矩形。

例如,一张2x2的图纸可以分成两张2x1,但不能分为两张,其中一张为1x1。 工作表可以根据需要进行多次分割。

我想创建至少一个完全由T瓷砖组成的作品。 如何找到达到此目标所需的最少拆分操作?

例如 如果,width = 5,height = 4,T = 8,则最小分割数=?
第一次拆分中将有2个片段:2x4、3x4。 2x4 = 8等于T。 分割数= 1。

我有蛮力解决方案,通过该解决方案,我可以找到在一张纸上获得T瓦片所需的最小分割数,但我正在寻找一种优化的方法。 有什么帮助或建议吗?

令n和m为木板的宽度和高度。

  1. 如果T> n * m,则显然不可能进行所需的分割。

  2. 如果n或m除以T,那么我们可以轻松地进行一个除法。 注意,只有一个分割就足够的情况就是T被n或m整除的情况。 另外,有一个特殊情况-当T = n * m时,我们不必进行任何分割。

  3. 在其余情况下,如第2节所述,我们必须至少进行两次拆分。 看到如果对于某些a <= n和b <= m T = a * b,那么我们可以进行一个分割以获取大小为axm的矩形,然后进行另一个分割以获取ax b。 因此,现在我们必须遍历所有可能的对(a,b),以使T = a * b。 如果其中有一对矩形axb可以容纳在大小为nxm的板上,那么我们可以回答答案是两个分割。 如果找不到这样的对,那么会发生什么情况,即对于T是一个大质数,那么就不可能像情况1那样分裂。

在某些情况下(即1.和2.),解决方案的复杂度为O(1),但在一般情况下(3.),当我们检查所有对(a,b)时,其复杂度为O(sqrt T)。 a * b = T然后MIN(a,b)<= sqrt(T)-这是一个常见的技巧,在搜索某个数的除数时也会使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM