矩形网格中最小平方网格数[JAVA]

时间:2016-06-07 05:37:56

标签: java algorithm optimization

我一直致力于解决问题,我需要将矩形网格(M * N)拆分为最小数量的方格网,让我给出一个实例的想法..

让我们考虑8 * 5网格。我们可以取出的第一个最大元素是5 * 5它将被遗漏3 * 5之后我们可以取出的最大矩形是3 * 3之后它是2 * 3我们可以拆分为2 1 * 1网格我需要一个更好的算法,时间复杂度更低,因为上面提到的算法需要更多的时间....感谢关于..

这里是给定问题陈述的视觉效果.. image

1 个答案:

答案 0 :(得分:2)

这个问题相当于找到两个数字的GCD(最大公约数)。

这就是我们如何通过一个例子来查找对(200x117)

的GCD

enter image description here

所以,我们可以做的是使用经典的Euclid algorithm

如果我们有一个矩形尺寸(a,b) and a >= b - >创建a/b方块大小(b, b)并解决矩形大小(b, a % b)的子问题,并继续,直到我们到达(x, 0)

伪代码

void gcd(int a, int b){
     if(b == 0)
        return;
     print a/b squares with size b x b;
     gcd(b, a % b);
}

时间复杂度应为O(log max(a,b))

因此,对于情况(5,4),首先,我们创建一个正方形(4,4) - >剩下的是if(4,1) - >创建4个正方形大小(1,1) - > (1,0) - >返回;